master 以外のブランチのみを上書きできるように、自分の git リポジトリを保護したいと考えています。選択したブランチのみを保護する方法はありますか?
7 に答える
GitEnterpriseを使用して、ブランチごとのアクセス許可(admin)を設定し、きめ細かいアクセスアクセス許可を使用して非早送りプッシュをブロックできます。
そしてgit config --system receive.denyNonFastForwards true
、すべてのブランチの履歴変更をブロックする必要がある場合は、単にその仕事をします。
構成することにより、早送り以外の更新を防ぐことができますdenyNonFastForwards
git config --system receive.denyNonFastForwards true
ただし、すべてのブランチに適用されます。詳細については、ProGitを参照してください。
サーバー側でリポジトリにアクセスするために何を使用するかによると思います。GerritやGitlabなど、ブランチごとのアクセス許可をサポートするサーバーアプリケーションがいくつかあります(ただし、Gitlabがユースケースをサポートしているかどうかはわかりません)。私は会社で同様のワークフローを使用しているため、Gerritはそれをサポートしています。
たぶん、Gitoliteもそれをサポートしています(Gitlabが内部で使用しているものです)。これはセットアップが簡単ですが、GerritやGitlabのようなWebインターフェイスはありません。
追加コメント:提案されているように、GitEnterpriseも優れたソリューションですが、独自のサーバー(多くの企業で一般的)がある場合は、私の提案が適しています。
このSOの答えは、探しているものを提供します。代わりに master ブランチに適用するように編集するだけです:
#!/bin/sh
# lock the master branch for pushing
refname="$1"
if [ "$refname" = "refs/heads/master" ]
then
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
echo "You cannot push to the master branch."
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
exit 1
fi
exit 0
更新:
これにより、早送りを含むマスター ブランチへのすべてのプッシュが防止されます。
サーバーの変更が許可されている場合は、サーバーでの早送りが有効になります。
ssh ip 'echo $"[receive]
denyDeletes = false
denyNonFastForwards = false" >> /path/to/repo/config'
#then git push -f origin master