如何将Git中的文件添加到以前的子模块的路径中?

How do I add files in Git to the path of a former submodule?

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

我现在想把mysubmodule的文件直接提交到我的repo中,但是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'错误。

我该怎么解决这个问题?


Git仍然认为mysubmodule是一个子模块,因为它以一种特殊模式"160000"记录在索引中。参见"Git子模块最初只需要更新?"更多信息。要检查这一点,如此答案中所示,您可以执行以下操作:

1
2
 $ git ls-tree HEAD mysubmodule
 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398  mysubmodule

这不取决于.gitmodule文件的存在,也不取决于mysubmodule文件的内容。

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

1
 git rm --cached mysubmodule

然后你可以继续。