在我们的项目中,我们有一个开发分支。我们有六个可以自由推动开发的开发人员,但是我们已经要求他们在开发之前在开发之前重新设置他们的功能分支。偶尔,人们忘记这样做,它会在开发过程中创建一个更丑陋的合并历史。
git中是否有配置设置,或者我们可以使用gitlab中的设置来防止不是快进合并的合并?理想情况下,我们希望GitLab中的策略可以在远程服务器上打开/关闭,因此我们可以全局关闭它。
答案 0 :(得分:3)
首先,通常的配置是服务器只接受快进合并(除非被-f覆盖)。但我假设你的情况是人们有自己的功能分支,然后合并开发到然后推动开发,所以现在历史有合并提交。
在服务器上,您可以设置git update hook。更新钩子将在每个分支上运行一次并接收分支名称的参数,新提交的提示被推送以及要添加新提交的分支的提示(即,origin / branchName)。脚本的返回值指示是拒绝还是接受提交。您可以简单地检查这两个提交之间是否存在任何合并提交。
#!/bin/sh
# .git/hooks/update
refname="$1"
oldrev="$2"
newrev="$3"
numMergeCommits=$(git rev-list --count --merges $oldrev..$newrev)
if [ $numMergeCommits -gt 0 ]; then
echo "Rejected - pushed branch must not contain any merges"
exit 1
fi
exit 0
请注意,这也不能用-f标志覆盖。此外,回显“Rejected ...”语句中的文本被回显给远程推送器,因此您可以在其中添加更具描述性的消息,希望通过指向wiki页面的链接向他们展示如何使用其重新编写分支。重新定义以使提交成为适当的形式。