我们使用GitLab并希望为开发人员禁用强制推送和rebase,但我们也希望它们能够合并和删除除受保护的分支之外的分支。我们希望将这些规则传播到我们所有的GitLab项目(大约有130个)和所有分支机构。有可能吗?
我们尝试使用受保护的分支 - 除了受保护的master
之外,我们将所有分支标记为受保护(通配符*
),并允许开发人员推送和合并,但也禁止受保护的分支被删除(即使合并请求被接受),所以它对我们不起作用。希望有人可以建议任何有效的解决方案。
答案 0 :(得分:0)
我找到的唯一解决方案是创建全局自定义挂钩(根据https://docs.gitlab.com/ce/administration/custom_hooks.html和https://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;