Help us understand the problem. What is going on with this article?

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に告知を流したり色々処理したり。
khlizard
Ruby, C#, Javascript, golang
http://khlizard.vanu.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away