GitHubで直push禁止を試してみた

はじめに

この記事では、「GitHubで直push禁止を設定する方法」について書いています。

ブランチ戦略では特定のブランチはpush禁止というルールにしていても、間違えてpushしてしまったりというのがあります。となったのが記事を書いたきっかけでした。

自分に向けた備忘録の意味もありますが、「GitHubで特定のブランチを直push禁止にしたい」「GitHubのpush禁止についてどんな設定があるか知りたい」な人の一助になれば嬉しいです。

要点だけ

  • リポジトリSetting > Branches からAdd ruleボタンを押し、自分の望むPush禁止の設定にする

手順

リポジトリSettingタブを開くと右側の欄にBranchesの項目があるので、そちらをクリックしてください。すると右側にBranch protection rulesというテキストが見えるかと思いますが、ここがBranchの保護ルールを表示、設定する箇所です。Branch protection rulesのテキストの右横にAdd ruleボタンがありますのでそちらをクリックしてください

下の2枚の画像のように、Branchに関するルール(設定)を行う画面が表れます。(都合上、2つの画像に分けて表示してます。)

Branch name patternは、適用したいブランチの名前を指定します。

今回は、mainブランチに対して直Push禁止を実施してみたいので、mainと入力します。

次に設定ですが、ひとまずは「とにかくpushすることを禁止」にしてみたいと思います。

2枚目の画像の一番上にLock branch(読み取り専用としプッシュは出来ないようにする)というのがあるかと思いますがこれにチェックを入れます。

次に、その下にあるDo not allow bypassing the above settingという項目にもチェックを入れます。

Note

Do not allow bypassing the above settingですが、リポジトリへの管理者権限を持つユーザーなど特別な権限を持つユーザーへの設定の適用をどうするかという項目で、チェックするとどんなユーザーにもブランチの保護設定が適用されます。

2つの項目にチェックを入れたら一番下にあるCreateボタンを押しましょう。すると下のような画面になり、Branch protection rulesにルールが追加されたことが確認できます。

それでは、実際にpushができないかどうかを確かめてみます。

ローカルで適当に変更を加えてcommit -> pushをし、下記のようなメッセージが出れば、ちゃんとpush禁止の設定ができていることになります。

remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Cannot change this locked branch
To https://github.com/xxxx/xxxxx.git
 ! [remote rejected] main -> main (protected branch hook declined)
error: failed to push some refs to 'https://github.com/xxxx/xxxxx.git'

おわりに

GitHubで直push禁止を設定する方法」について解説しました。

直pushを禁止することで、ブランチ戦略をより確実に効果的に推進することができるようになる、、、かもしれません。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

zenn.dev

https://docs.github.com/ja/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branchesdocs.github.com