我们希望通过允许这些分支从主分支中拉出/合并,然后再允许推送到开发分支(如果对主分支进行任何更改)来防止开发分支之间的长时间合并冲突。这可以强制执行吗?
答案 0 :(得分:2)
是,取决于托管中央存储库的方式。如果将其托管在GitHub或GitLab.com之类的网站上,则可能无法实现,因为这些类型的提供程序不允许您提供自己的代码来检查推送(您可以通过其网络界面配置一些限制,但我不能)想不到那里想要什么)。
对于自托管存储库,您可以在update
挂钩中执行此操作(请参阅documentation for hooks)。这是一个我尚未实际测试过的示例:
#!/bin/sh
if [ "$1" = "refs/heads/development" -a "$(git rev-list $3..master)" ]; then
echo "ERROR: master is not merged into development, please try again" >&2
exit 1
fi
如果您从development
上的提交集中减去master
的新状态下的提交集,这实际上检查了“什么都没剩下”。如果您已合并,development
将拥有master
的所有提交,因此结果将是空集。
这很简单,但有一些小缺点:
master
,则此挂钩中的检查可能尚未意识到对master
的新更改,因此在这种情况下,您可能会得到错误的否定(未合并的更改,但是推动通过。)master
上发生的最后(也是唯一)新事件是来自development
的合并,则该钩子会给出各种误报,因为master
将具有合并提交而development
不会。当然,我们知道这是两个分支之间的非实质性差异,但是挂钩中的简单设置算法无法理解这些区别。