在Gitlab中是否可以禁用所有分支的强制推送,但允许删除它们?

时间:2017-07-28 13:28:14

标签: gitlab

我们使用GitLab并希望为开发人员禁用强制推送和rebase,但我们也希望它们能够合并和删除除受保护的分支之外的分支。我们希望将这些规则传播到我们所有的GitLab项目(大约有130个)和所有分支机构。有可能吗?

我们尝试使用受保护的分支 - 除了受保护的master之外,我们将所有分支标记为受保护(通配符*),并允许开发人员推送和合并,但也禁止受保护的分支被删除(即使合并请求被接受),所以它对我们不起作用。希望有人可以建议任何有效的解决方案。

1 个答案:

答案 0 :(得分: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;