要在我的项目中实现类似fork / pull请求函数的github,自动合并功能需要在查看拉取请求时每次检测源/目标存储库之间的冲突。
我遇到的一个解决方案是分析'git request-pull'输出。有没有更简单的方法来检测冲突?
答案 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 diff
,git wtf
,git remote show <name>
获得相同的结果。
参考文献:
git wtf
:https://github.com/michaelklishin/git-wtf git request-pull
:http://progit.org/book/ch5-2.html 答案 3 :(得分:-1)
最后,我编写了自己的函数来检测冲突。
这很简单,只需获取所有差异线,并比较是否有相同的修改。