git push事故を、気合ではなく、GitHub Branch Protectionで防ぐ


masterにpushしないよう注意しましょう

昔はそんなことを気にしていました。今でもそういう現場があるかもしれません。

現在はGitHubのブランチプロテクションという素晴らしいものがあります。使いましょう。無料です。人類の注意力には限りがあるので、仕組みで防ぎましょう。

公式マニュアル

ブランチプロテクションは、リポジトリのAdmin権限を持っているか、OrganizationのOwnerロールであれば、設定できます。ブランチ毎に設定を組み立てます。

設定画面は

リポジトリ -> Settings -> Branches -> Add rule

設定例

例として、gitflowっぽく、

  • プルリクは、developから生やして、developにマージする
  • developは、masterから生やして、masterにマージする
  • hotfixのプルリクは、
    • masterから生やして、masterにマージする
    • developにもマージする

とかそんな運用をしてるイメージで。

develop

  • レビュー必須。いつでもapproveしてOK。ただし、approve後に更新されたら、再度approveが必要にする。approve後に、対応漏れが発覚して、追加のcommitした、などの場合を想定してます。
  • CIの正常終了が必須
  • リポジトリにAdmin権限を持ってるメンバーも例外なく適用

で、画像のようにチェックつけていきます。developブランチへのpushがガードされるのと、developブランチ宛てのプルリクに関して、レビューとかCIとかが必須になります。

master

  • レビュー必須。いつでもapproveしてOK。ただし、approve後に更新されたら、再度approveが必要にする。approve後に、対応漏れが発覚して、追加のcommitした、などの場合を想定してます。
  • hotfixを想定して、CIの終了は待たずともマージして良いことにする
    • 平時は、プルリクでCI必須にして担保しているから良しとする
    • 緊急時は、レビューで担保する。だって緊急でしょ
  • リポジトリにAdmin権限を持ってるメンバーも例外なく適用

masterブランチへのpushがガードされるのと、master宛てのプルリクに関して、設定どおりにガードされます。