2013-05-15 10 views
52

サブモジュールを使用していたプロジェクトが、パスmysubmoduleにあります。私はソース(1.8.3-rc2)から最新のGitをインストールし、git submodule deinit mysubmoduleを実行しました。その後、.gitmodulesファイルを削除し、変更を確定しました。 mysubmoduleフォルダから.gitディレクトリも削除しました。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'というエラーが表示されます。

これを修正するにはどうすればよいですか?

+1

[これらの手順](http://stackoverflow.com/a/1260982/955926)をすべてチェックして、サブモジュールの部分が残っていないことを確認しましたか?私は 'deinit'が完全にサブモジュールを削除するとは思わない。サブモジュールを使ってリポジトリをクローンしたように 'git/config'ファイルから削除するだけですが、まだ' git init'を実行していないようです。それはサブモジュールを完全に取り除くこととは異なります。この場合、gitはまだフォルダがサブモジュールだと思っていますが、無視しています。 –

答えて

71

特別なモード「160000」でインデックスに記録されているため、mysubmoduleはサブモジュールであると考えられます。
詳しくは、git submodule update needed only initially?をご覧ください。 .gitmoduleファイルの存在に、またはmysubmoduleの内容に依存しない

$ git ls-tree HEAD mysubmodule 
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 mysubmodule 

in this answerのように、あなたがすることができる、ことを確認するために

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

git rm --cached mysubmodule 

次に続行することができます。

+0

'git ls-tree HEAD mysubmodule'は結果を出せませんでしたが、' git ls-files --stage | grep mysubmodule'が動作しました。 [参考](https://stackoverflow.com/questions/1992018/git-submodule-update-needed-only-initially/2227598#2227598)それはなぜでしょうか? – nzn

+0

@nznわかりません:私は両方をテストしただけで、動作します。あなたが使っているgitのバージョンはどのOSですか? – VonC

関連する問題