ウッカリ main ブランチにコミット・Push しないようにする Git Hooks を作る

今さらなネタだが書いておく。業務環境によってはリモート Git サーバ側でブランチ保護設定ができない場合もあったりするので、クライアント側で Git Hooks を作って自衛しときましょう、という話。

$ cd /PATH/TO/GIT-DIRECTORY/
$ cd ./.git/hooks/

# サンプルファイルが置いてあるのでそれをコピーしてファイルを用意する
$ cp ./pre-commit.sample ./pre-commit
$ cp ./pre-push.sample ./pre-push

# もし実行権限が付いていなければ付与する
$ chmod +x ./pre-commit
$ chmod +x ./pre-push
#!/usr/bin/env/ bash

current_branch=$(git symbolic-ref --short HEAD)
if [ "${current_branch}" = 'main' ]; then
  echo 'エラー!main ブランチにコミットしようとしています!'
  exit 1
fi
#!/usr/bin/env bash

current_branch=$(git symbolic-ref --short HEAD)
if [ "${current_branch}" = 'main' ]; then
  echo 'エラー!main ブランチに Push しようとしています!'
  exit 1
fi

こんな感じで、.git/hooks/ 配下に用意した所定のファイル名のシェルスクリプトが、exit 1 などである条件の時に異常終了するようにしてやれば、コミットや Push が失敗するようになる。