はじめに
リリース時にのみmaster
にpushすることがあるんですが、これをリリース時以外にやってしまうとrevert操作などが必要になって結構面倒なことになります。
そこで、git hooksのpre-push
フックを使って特定のブランチへのpushの際に確認メッセージを表示するように設定しました。(chatGPTの力も存分に借りながら)
設定方法
1. .git/hooks/git-push
ファイルを作成する
2. 設定を記載する
以下の設定では、master
とdevelop
にpushするときに、[WARNING] push to ブランチ名, are you sure? (Y/n)
といったメッセージが表示され、Y
を入力した際にのみpushがされます。
#!/bin/sh protected_branches="master develop" current_branch=$(git branch --show-current) for branch in $protected_branches; do if [[ "$current_branch" == "$branch" ]]; then echo "[WARNING] push to $branch, are you sure? (Y/n)" exec < /dev/tty read answer if [[ $answer != "Y" ]]; then echo "Push canceled" exit 1 fi fi done exit 0
3. 実行権限を付与
作成したファイルに実行権限を付与します。
$ chmod +x .git/hooks/pre-push
以上で、設定は完了です。
確認
例えば、n
を入力するとpushはキャンセルされます。
$ git push [WARNING] push to master, are you sure? (Y/n) n Push canceled
逆に、Y
を入力すればpushされます。
おわりに
chatGPTに言われた方法だと、read
コマンドを使う方法で、それを元に色々試してみたのですが、うまくいかなかったです。(pre-pushで行うのも関係している、、?と思いましたが深追いはしていません)
ググっていたら以下の記事に出会って、read
コマンドではなく、exec < /dev/tty
で行うようにしました。
- 参考記事