Edited at

Git hooks まとめ

More than 3 years have passed since last update.

他のバージョン管理システムと同様 git にも hook が色々存在しますが、役割を適用順に一覧にしたサイトが見当たらなかったので自分用にここに書いておこうと思います。

細かいことはは公式ドキュメントを見てください。

また各々の hook script の書き方自体は、手元の環境の .git/hooks/*.sample を参考にしてください。


commit関係

見ての通り、コマンドを実行してからの流れ順に書きます。


  1. git commit


  2. pre-commit

     commit前に起動しコードをチェックするなどで使う。

     0以外を返すとcommit中止。--no-verifyで無視。


  3. prepare-commit-msg

     commit時のデフォルトメッセージ編集用。

  4. エディタが起動し commit msg の入力


  5. commit-msg

     commit msg が既定のフォーマットに沿っているかなど確認する為に使う。

     0以外を返すとcommit中止。--no-verifyで無視。

  6. 実際にcommitが実行される


  7. post-commit
     commit後の通知や自動処理に使う


Eメールワークフロー関係

「Eメールワークフロー」=「gitを使ってpatchのやりとり」です。

私自身はこの機能を使ったことがないため、コマンドの使い方などは間違っている可能性があります。


  1. git am foobar.patch


  2. applypatch-msg

     patch中の commit msg のチェック用。0以外を返すと中止。

  3. 一時的にpatchを適用(commitはまだ)


  4. pre-applypatch

     patchが適用された物が正常動作するかどうかなどの受け入れテスト用。

     0以外を返すと適用中止。

  5. patchを正式に受け入れcommit


  6. post-applypatch

     apply 後の通知や自動処理に使う


rebase / merge関係

こちらはシンプルなので説明だけ



  • pre-rebase

     rebase する前にチェックして rebase を中断させるなどで使う。

     0以外を返すとrebase中止。


  • post-rebase

     事後の告知とか自動実行とか。


  • post-merge

     同じく merge 版の事後の告知とか自動実行とか。こちらはpreはない。


サーバサイドフック

外部から push されたときに動くスクリプトです


  1. git push your_server master


  2. pre-receive

     push を受けた際の最初に実行される。主に受け入れテスト用。

     0以外を返すと受け入れ中止。


  3. update

     push を受けた際ブランチ毎に実行される。主に受け入れテスト用。

     0以外を返すと受け入れ中止。

  4. Received!


  5. post-update

     push を受けた際ブランチ毎に実行される。多分メッセージ表示とか用。


  6. post-receive

     push を受けた際の最後に実行される。MLに告知を流したり色々処理したり。