2012-04-24 214 views
7

为了在我的项目中实现类似fork/pull request的github功能,自动合并功能需要在查看拉取请求时检测源/目标存储库之间的冲突。如何检测两个git存储库之间的冲突。

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

+0

在这里问什么?你在实施一个合并工具吗?还是一个差异化的工具?或者只是好奇git push会做什么? – 2012-04-24 03:03:45

+0

在github中,只需点击网页上的按钮即可合并非冲突拉取请求。由于源/目标存储库可以继续提交,因此在此过程中必须检测到冲突。我在问一个更简单的方法来检测冲突。 – stcatz 2012-04-24 03:29:42

回答

-2

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

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

+2

将它发布在这里以供将来参考将是非常好的 – CharlesB 2012-06-20 08:07:20

2

我已经删除了我以前的答案,我不明白的问题...

现在,这里的闪亮的新的答案:

git merge --ff-only <branch> 

如果没有冲突,它会做一个合并。如果发生冲突,它会提示您:Not possible to fast-forward。在这种情况下,控制台返回码(echo $?)为128。

+0

这与问题无关,但在提取后合并时很好。 – 2015-03-13 12:35:00

0

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

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

所以,要回答你的问题,如果你需要实现这种功能,你应该尽可能地尝试合并你的源/目标并回滚合并动作(使用git reset --hard)。

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

参考文献:

1

我们创建了一个git冲突检测器,用于检查最新推送提交与所有现有分支。

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

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

我们已经开源它,都可以享受,学习和贡献。