自動化好きの道具箱Git hook
本記事
Gitにはhookというイベントによって発火し実行できる機能があります。
画像にもあったように、「push
前にこの処理を挟みたい、、、」などのケースはたくさんあったので、皆さんもあるのではないでしょうか。
今回はそのhookを詳細に掴んでいこうと思います。
公式ページ
分類分け
以下の二つにまず大きく分けることができます。
1. クライアントサイドフック
commit
やmerge
といったクライアントでの操作でフックが発火します。
また、以下のようにもっと細かく分けることできます。
1.1 コミットワークフローフック
pre-commit
フックはコミットの入力前に実行され、0
以外のステータスコードが返ってきたときにコミットが中断されます。。使い道としては、コミット前のテスト実施や、コードに.env
が入ってしまわないかを確認したり用途は広いです。
git commit --no-verify
で実行を無視することができます。
prepare-commit-msg
フックはコミットメッセージエディターが起動する直前、デフォルトメッセージが生成された直後に実行されます。コミットの作者がそれを目にする前にデフォルトメッセージを編集することができます。
commit-msg
フックはスクリプトが0以外の値を返した場合Gitはコミットプロセスを中断します。
post-commit
フックは、コミットプロセスが完了した後に実行されます。git log -1 HEAD
を実行することで直前のコミットを簡単に取り出すことができます。
1.2 Eメールワークフローフック
git am
コマンドに対するものなのですが、私も、私の周りもあまりこのコマンドを使う人がいないので割愛します。
1.3 その他のクライアントフック
pre-push
フックはpushする前に実行され、ゼロ以外の終了ステータスを返すと以下のようになる。
pre-rebase
フックは何かをリベースする前に実行され、ゼロ以外を返すとその処理を中断させることができます。
post-checkout
フックはgit checkout が正常に終了すると実行されます。
post-merge
フックはmerge
コマンドが正常に終了したときに実行されます。
2. サーバーサイドフック
プッシュされたコミットを受け取るといったサーバーでの操作でフックが発火します。
また、以下のようにもっと細かく分けることできます。
1.3 その他のクライアントフック
pre-receive
フックはgit push
をしたら最初に実行されます。
post-receive
フックは処理が終了した後で実行されるもので、他のサービスの更新やユーザーへの通知などに使えます。
update
スクリプトは pre-receive スクリプトと似ていますが、プッシュしてきた人が更新しようとしているブランチごとに実行されるという点が異なります