如何检测两个git存储库之间的冲突。

时间:2012-04-24 02:58:20

标签: git pull-request grit

要在我的项目中实现类似fork / pull请求函数的github,自动合并功能需要在查看拉取请求时每次检测源/目标存储库之间的冲突。

我遇到的一个解决方案是分析'git request-pull'输出。有没有更简单的方法来检测冲突?

4 个答案:

答案 0 :(得分:2)

我删除了之前的答案,我不明白这个问题......

现在,这是一个闪亮的新答案:

git merge --ff-only <branch>

如果没有冲突,它将进行合并。如果发生冲突,它会向您显示一条消息:Not possible to fast-forward。在这种情况下,控制台返回码(echo $?)是128。

答案 1 :(得分:1)

我们已经创建了一个git-conflict-detector,用于检查最新的推送提交与所有现有分支。

这是一个简单的单个脚本,由GitHub WebHook URL启动,甚至知道在检测到冲突时发送了HiChat通知。

我们的解决方案基于分析git merge --ff-only <branch>输出,您可以看到here

我们开源,所以所有人都可以享受,学习和贡献。

答案 2 :(得分:0)

据我所知,在实际合并这些分支之前,你无法确定合并是否会产生冲突。

已经在How to test a merge without actually merging first中指出了这一点。

因此,要回答您的问题,如果您需要实现此类功能,您应该尝试合并源/目标并回滚合并操作(使用git reset --hard)。

我从未使用git request-pull,但查看输出,我没有看到任何可以帮助您解决问题的信息。您可以使用git diffgit wtfgit remote show <name>获得相同的结果。

参考文献:

答案 3 :(得分:-1)

最后,我编写了自己的函数来检测冲突。

这很简单,只需获取所有差异线,并比较是否有相同的修改。