2017-07-28 121 views
0

我们使用GitLab并希望为开发人员禁用强制推送和重定位,但我们也希望他们能够合并和删除除受保护的分支以外的分支。我们希望将这些规则传播到我们所有的GitLab项目(其中大约有130个)以及所有分支机构。可能吗?是否有可能在Gitlab中禁用所有分支的强制推送,但允许删除它们?

我们试图使用受保护的分支 - 除了保护master我们纪念所有分支的保护(通配符*),并允许开发者推和合并,但保护的树枝也被删除(即使合并请求被接受禁止),所以它不适合我们。希望有人能建议任何工作解决方案。

+0

不能完全确定,如果有一个简单的解决方案,但是这将是值得考虑看看:https://docs.gitlab.com/ee /user/permissions.html – ninge

+0

@ninge,是的,我已阅读此页面。但从我看来,强制推送和移除分支的权限是相同的(对于受保护和不受保护的分支)。我没有找到任何方法来改变它。我想念什么? –

回答

0

我发现的唯一解决方案是创建全局自定义挂钩(根据https://docs.gitlab.com/ce/administration/custom_hooks.htmlhttps://stackoverflow.com/a/17064462/2190541)。所以我创建可执行文件gitlab-shell/hooks/pre-receive.d/disable-force-push.sh,内容如下:

#!/bin/sh 
# <oldrev> <newrev> <refname> 
# update a blame tree 

while read oldrev newrev ref ; do 
    # old revision is blank - branch creation 
    if [ "$oldrev" = "0000000000000000000000000000000000000000" ] || 
     # new revision is blank - branch deletion 
     [ "$newrev" = "0000000000000000000000000000000000000000" ] ; 
    then 
     # create new or delete old branch 
     continue; 
    fi 

    base=$(git merge-base $oldrev $newrev); 
    if [ "$base" != "$oldrev" ] ; then 
     # non fast forward merge 
     echo "Force pushing of $ref is forbidden"; 
     exit 1; 
    fi 
done 
exit 0; 
相关问题