71

我有一个项目,它曾经在 path 包含一个子模块mysubmodule。我从源代码(1.8.3-rc2)安装了最新的 Git 并运行git submodule deinit mysubmodule. 然后我删除了.gitmodules文件并提交了更改。我还从文件夹中删除了.git目录mysubmodule

我现在想mysubmodule直接将文件从我的仓库提交到我的仓库中,但是 git 说没有任何变化。如果我键入git add mysubmodule它什么也不做。如果我输入git add mysubmodule/file.txt它说fatal: Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'

我还发现,如果您查看新版本的 repo,它会创建一个mysubmodule目录,尽管没有.gitmodules文件。运行git submodule init会给你一个No submodule mapping found in .gitmodules for path 'mysubmodule'错误。

我该如何解决?

4

1 回答 1

96

Git 仍然认为mysubmodule是一个子模块,因为它以特殊模式“160000”记录在索引中。
有关更多信息,请参阅“ git submodule update 仅最初需要? ”。
要检查这一点,如在此答案中,您可以执行以下操作:

 $ git ls-tree HEAD mysubmodule 
 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398  mysubmodule 

这不取决于.gitmodule文件的存在或mysubmodule.

您需要先从索引中删除该条目:

 git rm --cached mysubmodule

然后你可以继续。

于 2013-05-16T07:09:46.947 回答