2016-11-20 1132 views
1

我们正在使用GitLab 8.5.0版。我正在编写一个自定义的服务器端更新挂钩来锁定特定的分支。它工作的很好,但是,我想让GitLab合并请求得到处理。所有GitLab合并请求通常在提交描述中都有“请参阅合并请求”注释。因此,我想只允许那些包含提交消息“请参阅合并请求”的提交。但是,它并不按我想的方式工作。锁定分支但允许gitlab合并请求

任何其他可能的方式只允许gitlab合并请求?

#!/usr/bin/env bash 

GIT_COMMIT_MSG=`git log -1 HEAD --pretty=format:%s` 

if [[ "$1" == refs/heads/master ]]; then 
if [[ "$GIT_COMMIT_MSG" =~ *"See Merge request"* ]]; then 
    echo "This is GitLab Merge Request" 
else 
    echo $GIT_COMMIT_MSG 
    echo "ERROR: you are not allowed to update master" >&2 
    exit 1 
fi 

fi 
+0

如果你允许任何提交文本'See Merge request'来通过,那么会阻止恶意用户插入这个文本来欺骗你的脚本? –

+0

我知道这不是一个正确的方法..如果有任何其他权利的机制来跟踪gitlab提交 – user6930

回答

4

我知道你正在使用GitLab 8.5,但如果可能的话,可以考虑升级到8.11,其中这已经原生(更安全)来实现。
请参阅“Using the Allowed to merge and Allowed to push settings

您可以设置“Allowed to push”到“No one”和“Allowed to merge”为“Developers + Masters要求大家提交更改进入受保护的分支合并请求。

enter image description here

然后,所有你需要的是保护一些分支,他们将只能通过合并请求进行修改。

+1

顺便说一句,对于任何人*不*使用GitLab,我有我自己的示例预接收脚本,这样做(称为允许的用户“维护者”和“超级维护者”)。它有更多可调整的旋钮。该脚本在http://web.torek.net/torek/git/pre-receive.sh.txt – torek

+1

谢谢,很高兴知道锁定是在更高版本中实现的。不幸的是,升级目前不是一种选择。 – user6930