はじめに
GitHub で運用しているときに PR のマージ先を変更し忘れてデフォルトブランチへの誤マージが発生することがあると思います。
これを防止するためにはどうするのがいいのでしょうか。
1. 保護ブランチにする
保護ブランチにすればレビューや CI のチェックを必須にできます。
Settings > Branches > Branch protection rules から設定できます。
レビューした人がマージ先を確認し忘れるとマージされてしまいます。
2. マージできる権限を絞る
そもそもよく分かっていない人がマージできてしまうのはよくないのでマージできる人を絞ります。
組織だとチームが作れると思うのでチームを分類してそれぞれに適切な権限を付けます。
Settings > Manage access から管理できます。
こちらもマージする人がマージ先を確認し忘れるとマージされてしまいます。
3. develop ブランチを設定する
開発用ブランチが develop ブランチ 1 本しかないならそちらをデフォルトブランチに設定します。
間違ってマージしてしまっても revert するチャンスは多いのでさほど問題にならない気がします。
4-1. ダミーブランチを設定する
ダミーブランチとして default ブランチ(名前は何でもいいです)をデフォルトブランチに設定します。
PR を作るときに常にマージ先を変更する手間を挟むことでそもそも master へ PR を送るのを防止します。
間違ってマージしてしまってもプロダクトに影響はありません。
ただし誤マージに気付かないと闇に葬られてしまうので注意が必要です。
開発用ブランチが複数あって並行で開発が進んでいる場合にどのブランチを設定するか迷うことがあります。
そうなると master ブランチがデフォルトブランチになりがちです。
develop ブランチであれば誤マージされても影響が少なくても master ブランチだとそうもいかないことが多いので代わりにダミーブランチを設定します。
4-2. master に追従するダミーブランチを設定する
ダミーブランチを作るだけだと段々 master と乖離して PR を作るときに差分が多くなり重くなってしまいます。
そこで master ブランチに追従させます。
ブランチを追従させる GitHub Actions
default ブランチは予め作っておきます。
name: Follow branch
on:
push:
branches: master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: git fetch --no-tags --prune --unshallow
- run: git checkout -B default origin/default
- run: git merge --ff-only origin/master
- run: git push origin default
マージを fast-forward only にすることで誤マージが発生したときにこのアクションがエラーになってくれるので気付けます。
おわりに
自分が知っているのはこの 4 つ(の組み合わせ)くらいなんですがみなさんどうしてるんでしょうか。