一般に、誰かがローカル リポジトリに変更を加えるのを確実に防ぐことはできません。開発者が間違いを犯さないと信頼していない限り (その場合、これは必要ありません)、サーバーのフックでチェックを実行する必要があります。
つまり、人々が分岐するのを防げるとは期待できないということです。あなたができることは、何らかの形で「承認」されていない作業をサーバーの展開ブランチ (これを と呼びますdeploy
) にプッシュしないようにすることです。
さて、最初の質問は、その承認をどのように表明するかです。
承認された人が作業をデプロイする前にレビューする必要があるワークフローが必要な場合、作業が現在 という名前のブランチにある場合、レビュー担当者に次の手順を実行してもらいますreview
。
deploy
が に完全にマージされていることを確認してreview
、後でdeploy
に早送りできるようにしreview
ます。
- で適切な検証を行い
review
ます。
git tag -s
のコンテンツに対して、承認されたキーを使用して、署名付きタグ ( ) を作成してプッシュしますreview
。
- ( , ) まで早送り
deploy
して押します。review
git checkout deploy
git merge --ff-only review
代わりに、誰でも展開できるようにしたいが、最初にそれについて考える必要があるようにしたい場合は、同じことを行うことができますが、署名の要件を緩和することができます. または、特定のブランチ (たとえば ) を bless し、すべての作業を にプッシュする前にtested
マージしてプッシュするように要求することもできます。tested
deploy
deploy
保護されたブランチに対してこの承認が与えられたことをサーバーはどのように確認できますか? 基本的な計画は、フックを使用して、決定した受け入れ基準に従ってupdate
ref-updates を受け入れるか拒否することです。refs/heads/deploy
承認されたキーによって署名されているなど、特定の基準を満たすタグが必要な場合は、git for-each-ref refs/tags
. いずれかのタグが基準を満たしている場合は更新を受け入れることを忘れないでください。さもないと、遅かれ早かれ誰かがデプロイをブロックする不適切なタグをプッシュすることになります。正しいキーが使用されたことを確認することは、読者の課題として残されていますが、gpg --no-default-keyring --keyring=approved.gpg
役立つ場合があります。
誰かがタグ付けしている限りコミットを行う場合は、git describe --exact-match <object>
. 特定の名前パターンのタグに限定したい場合は、 を追加し--match <pattern>
ます。注釈なしのタグを受け入れる場合は、--tags
.
デプロイメントにマージされる前に作業を Blessed ブランチにマージする場合は、 の出力がgit rev-parse tested
提案された新しいオブジェクトと等しいことを確認できます。
いずれの場合も、プッシュが早送りプッシュであることを再確認する必要があります。git merge-base <old> <new>
と等しいことを確認できます<old>
。