2017-07-28 2 views
0

私たちはGitLabを使用し、開発者の強制プッシュとリベースを無効にしたいが、保護されているものを除いて、ブランチをマージして削除できるようにしたい。そして、私たちはこれらのルールをすべてのGitLabプロジェクト(そのうちの約130社)に、そしてすべての支店に広げたいと考えています。出来ますか?Gitlabではすべてのブランチに対して強制プッシュを無効にできますが、削除することはできますか?

私たちは、保護された枝を使用しようとしました - 保護されたmasterに加えて、我々は、マージ要求を受け付けた場合でも、保護として(ワイルドカード*)すべての分岐をマークし、開発者が押すとマージすることができますが、保護された枝はまた、(削除から禁止されています)、それは私たちのために働かない。誰かが何らかの実用的な解決法を提案できることを願っ

+0

正確にわからない:https://docs.gitlab.com/eeだから私は、次の内容の実行可能ファイルgitlab-shell/hooks/pre-receive.d/disable-force-push.shを作成しました/user/permissions.html – ninge

+0

@ninge、はい、このページを読んでいます。しかし、私が見ているように、強制的にプッシュする権限とブランチを削除する権限は同じです(保護されたブランチと保護されていないブランチの両方)。そして私はそれを変更する方法を見つけませんでした。私は何かが恋しいですか? –

答えて

0

私が見つけた唯一の解決策は、グローバルカスタムフックを作成することです(https://docs.gitlab.com/ce/administration/custom_hooks.htmlおよびhttps://stackoverflow.com/a/17064462/2190541に従って)。そこに簡単な解決策があるが、これは見てみる価値があるだろう場合

#!/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; 
関連する問題