web-dev-qa-db-ja.com

Gitのファイルを以前のサブモジュールのパスに追加するにはどうすればよいですか?

パスmysubmoduleにサブモジュールが含まれていたプロジェクトがあります。ソース(1.8.3-rc2)から最新のGitをインストールし、git submodule deinit mysubmoduleを実行しました。その後、.gitmodulesファイルを削除し、変更をコミットしました。 mysubmoduleフォルダーから.gitディレクトリーも削除しました。

ファイルをmysubmoduleからリポジトリに直接コミットしたいのですが、gitは変更はないと言います。 git add mysubmoduleと入力しても何もしません。 git add mysubmodule/file.txtと入力すると、fatal: Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'と表示されます

また、レポの最新バージョンをチェックアウトすると、.gitmodulesファイルがないにもかかわらず、mysubmoduleディレクトリが作成されることも発見しました。 git submodule initを実行すると、No submodule mapping found in .gitmodules for path 'mysubmodule'エラーが発生します。

どうすれば修正できますか?

65
Chris B.

Gitはmysubmoduleがサブモジュールであると考えています。これは、特別なモード「160000」でインデックスに記録されるためです。
詳細については、「 gitサブモジュールの更新は最初にのみ必要ですか? 」を参照してください。
これを確認するには、 この回答では のように、次のことができます。

 $ git ls-tree HEAD mysubmodule 
 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398  mysubmodule 

それは.gitmoduleファイルの存在やmysubmoduleの内容に依存しません。

最初にインデックスからそのエントリを削除する必要があります。

 git rm --cached mysubmodule

その後、続行できます。

86
VonC