Git认为一些复制的代码是一个子模块

时间:2014-03-08 03:09:33

标签: git git-submodules

为了调试第三方库中的问题,我将其源代码复制到我自己的git仓库中。我立刻重现了这个问题所以想要记录一个起点。当我尝试提交时,我复制的文件都没有显示在我的工作树中,所以我无法进行分级。

我尝试显式转发复制源中的一个文件:

git add README 
fatal: Path 'Src/Foo/README' is in submodule 'Src/Foo/FooBar'

所以看起来git认为它是一个子模块,尽管我从来没有告诉过它。我尝试删除第三方源根目录中的 .git 目录,但这没有帮助。然后我尝试了these instructions,但它告诉我没有子模块:

git submodule deinit .
No submodule mapping found in .gitmodules for path 'Src/Foo/FooBar'

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

最简单的解决方案是克隆第三方仓库,重现您的修复,提交和推送(如果您有权访问他们的仓库,那么,如果您有forked it on GitHub

如果没有,请(在您的回购的新鲜克隆中)a:

git ls-tree HEAD Src/Foo/FooBar

查看是否有special entry 160000,表明FooBar在某个时间点被注册为子模块),即使.gitmodules不再列出FooBar。

git rm --cached Src/Foo/FooBar(使用git 1.8.5+)将处理该子模块条目。


当然,如果第三方来源不是git仓库的一部分,那么将它们添加到您自己仓库中的不同文件夹中也会起作用。
但是这些第三方库文件的历史将与主要仓库的历史混合在一起。