👮

保護ブランチへの直 push を禁止する

2 min read 1

要約

特定のブランチへの直 push を禁止するためにはブランチ保護を設定するだけでは足りず、レビューまたはステータスチェックを必須にする必要があります。

保護ブランチ

目的

意図しない変更が入らないようにブランチを保護します。

https://docs.github.com/ja/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches

設定方法

https://docs.github.com/ja/github/administering-a-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule

リポジトリの Settings > Branches > Branch protection rules > Add Rule で設定できます。

Branch name pattern に保護したいブランチ名を入力します。
パターンも使えるので milestone/* のような指定もできます。詳細はドキュメント参照。

Include administrators にチェックを入れて管理者も対象にしておきましょう。

直 push を禁止するためにはレビューまたはステータスチェックを有効にする必要があります。

レビューを必須にする場合

Require pull request reviews before merging にチェックを入れます。
デフォルトだと 1 人以上のレビューが必須になります。

ステータスチェックを必須にする場合

レビューを必須にしたくない場合はこちらを設定します。
既に CI が走っているようだったら Search for status checks in the last week for this repository から検索して必須にしたいものを設定します。
必須にしたいものがない場合は常に成功を返すステータスを作成します。

常に成功を返すステータスを作成する

ステータスの実装には GitHub Actions を使うのがお手軽です。
直 push を禁止するだけであれば常に成功するワークフローを作成します。
ジョブ名で設定することになるので一意になるように名前を付けます。

.github/workflows/branch-protection.yml
name: Branch protection

on:
  pull_request:

jobs:
  success:
    runs-on: ubuntu-latest

    steps:
      - run: echo "Always success"

保護ブランチのステータスチェックで success を required に設定します。

直 push しようとすると…

直 push しようとするとリジェクトされます。
force push やブランチの削除もできません。

当然 GitHub 上で編集しようとしたときも保護ブランチへは直接コミットできません。

直 push やブランチの削除をしたくなった場合

保護ブランチの設定で force push や削除を有効にすることができます。

Discussion

ログインするとコメントできます