查找我的分支是否与任何远程分支冲突

Find if my branch conflicts with any remote branch

我们公司采用每个功能分支的方法。因此,每个开发人员都创建一个新分支,破解并推送到服务器上的共享仓库。服务器 repos 的 post-receive 挂钩将触发拉取请求!

在允许用户推送到服务器之前,我想检查 his/her 分支是否与服务器上任何未合并的主分支发生冲突!

目前我给出了一个固定命令,它从服务器获取所有 pull-request 分支并根据每个 em 重新设置开发人员分支并发现它是否产生冲突!

问题:
1.每个分支rebasing/merging的过程需要ages
2.它不断地改变工作树

我是不是做错了,或者是否有任何其他方法可以确定开发人员分支是否会与服务器上的任何拉取请求分支发生冲突!

Before I allow user to push to server I want to check if his/her branch gives conflict with any unmerged-with-master branch on server!

在我看来,这是一个非常不正确的策略。你必须意识到冲突是git的正常部分,它们没有任何不洁之处,无论你多么努力避免它们,它们都会发生一次或另一次。

例如,如果有 2 个功能,它们都用不同的代码行修改同一行号的文件,git 最终肯定会引发冲突 - 你没有办法避免这种情况。

现在因为您将拥有此检查无冲突 脚本,除非合并第一个分支,否则您将永远无法推送第二个分支。绝对是浪费时间和开发人员的生产力。

此外,您忘记了即使分支未准备好合并,开发人员也可以推送他们的分支,您最终也无法做到这一点。如果两个或更多开发人员正在协作,他们将无法简单地因为他们无法推送,因为他们的分支与其他分支冲突

如果你有一个足够大的开发团队(比如 10 个),有足够多的分支(比如 100 个),你基本上最终会与 100 个分支进行比较,在每个开发者的每次推送中。想象一下,10 个开发人员一天只推进两次,而您已经发现不同开发人员组之间可能存在 2000 个冲突点。人们可能最终很容易花更多的时间过早地解决冲突然后发展。


那么如何以一种理智的方式做到这一点呢?

基本上,不要试图过早地避免未来的冲突。

将其中一个分支作为参考 - 仅检查 master 分支并确保在合并时绝对没有与此冲突。

每次要合并的时候,检查一下和master有没有冲突,没有冲突才合并。如果有冲突,请 request/branch 所有者获取更新后的 master,rebase 他的分支,解决冲突并再次推回。