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

我有一个项目,用于包含一个子模块,在路径 mysubmodule。我从源代码安装了最新的 Git (1.8.3-rc2)并运行了 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'

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

我该怎么补救?

25562 次浏览

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

 $ git ls-tree HEAD mysubmodule
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398  mysubmodule

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

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

 git rm --cached mysubmodule

然后你就可以继续了。