Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在合并或推送要素分支之前,强制重新设置其基础_Git_Gitlab - Fatal编程技术网

Git 在合并或推送要素分支之前,强制重新设置其基础

Git 在合并或推送要素分支之前,强制重新设置其基础,git,gitlab,Git,Gitlab,在我们的项目中,我们有一个开发分支机构。我们有六个开发人员可以自由地推动开发,但我们已经要求他们在进行合并之前,在开发的基础上重新设置他们的功能分支。偶尔,人们会忘记这样做,这会在开发过程中创造出更丑陋的合并历史 git中是否有配置设置,或者gitlab中是否有可以用来防止非快进合并的合并的设置?理想情况下,我们希望GitLab中有一个可以在远程服务器上打开/关闭的策略,这样我们就可以全局关闭它。首先,通常的配置是服务器只接受快进合并(除非被-f覆盖)。但我假设你的情况是,人们有自己的特性分支,

在我们的项目中,我们有一个开发分支机构。我们有六个开发人员可以自由地推动开发,但我们已经要求他们在进行合并之前,在开发的基础上重新设置他们的功能分支。偶尔,人们会忘记这样做,这会在开发过程中创造出更丑陋的合并历史


git中是否有配置设置,或者gitlab中是否有可以用来防止非快进合并的合并的设置?理想情况下,我们希望GitLab中有一个可以在远程服务器上打开/关闭的策略,这样我们就可以全局关闭它。

首先,通常的配置是服务器只接受快进合并(除非被-f覆盖)。但我假设你的情况是,人们有自己的特性分支,然后合并开发到其中,然后推动开发,所以现在历史上有合并提交

在服务器上,可以设置。更新钩子将在每个分支上运行一次,并接收分支名称的参数、正在推送的新提交的提示以及要添加新提交的分支的提示(即,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标志覆盖。此外,echo“Rejected…”语句中的文本将被回送到远程推送器,因此您可以在那里放置更具描述性的消息,希望有一个wiki页面的链接,向他们展示如何使用rebase重做分支以将提交转换为正确的形式。

您可能需要为此设置githook,您还可以在服务器端git的配置文件中添加以下行:
[receive]denyNonFastForwards=true DenDeletes=true