是什么导致git中的子模块冲突,应该如何解决?

时间:2011-07-14 21:22:27

标签: git merge git-submodules conflict

我们正在使用子模块,我们是git的新手。

我们经常看到子模块本身的合并冲突,没有文件冲突,只有子模块。 git submodule summary的输出中列出了多个版本。我们通过在超级项目中运行git add <submodule>来解决它们 但是今天我们让开发人员在以这种方式解决冲突时失去了子模块的提交 运行git add会选择远程版本吗?不应该合并子模块的内容吗?如果她在子模块中进行了更改并提交了它们(我看到了),那么为什么在执行拉动并解决冲突后该提交会消失?

2 个答案:

答案 0 :(得分:12)

您的本地子模块和远程子模块已发生分歧。

git checkout --theirs submodulename

或您的版本:

git checkout --ours submodulename

然后使用git add提交更改并提交更改。

注意:如果tabcomplete,shell可能会向submodulename添加一个尾部斜杠,因为它也是一个子目录。如果是这样,您需要将其删除,否则您将获得:

error: pathspec 'submodulename/' did not match any file(s) known to git.

答案 1 :(得分:10)

文件 冲突和 子模块 冲突发生当您当前的分支机构和分支机构时-want-to-merge-into已经分道

这仅仅意味着存在一种模棱两可的情况 - 你可以合理地希望 在任何特定情况下“赢”。因此,虽然它看起来很“烦人”,但它们只是突出显示您丰富的选项以指定您想要的内容(并且您必须指定您想要的内容)。 (并且,程序员每天所做的只是指定细节。)

似乎git-add-the-submodule-on-the-superproject应该有效。但是,您也可以立即选择git-checkout-on-the -proproject。这个链接(解决子模块冲突)中提到了这个问题,它讨论了文件冲突和 summodule 冲突之间的区别,以及如何解决这些冲突:

http://pacific.mpi-cbg.de/wiki/index.php/Git_Conflicts