shop.oreilly.com
Hooks
- リポジトリローカル
- 大別
- pre
- アクション満了前に実行
- 承認/否認、変更反映等に利用
- post
- hookは最後の手段
- 濫用
- Gitデフォルトの振る舞いを変えてしまうと、Git慣れしている人が触るとき戸惑う
- hookにより本来速い操作が遅くなりうる
- 例: pre-commit hookで単体テスト実行
- コミットに時間がかかり、コミットが億劫になってしまう
- hookで実行されるスクリプトがバグっていると仕事の妨げになる
- hookが他の開発者に伝播する保証がない
- セキュリティ上の理由で、blob,tree,commit以外のオブジェクトはcloneされない
Column Junio's Overview of Hooks
- hookを正当化する理由
- コマンドの取り消し
- コマンド実行開始後に生成されるデータの加工
- commit-msg でコミットログメッセージを改変する
- gitプロトコルでしかアクセスできないリモート先の操作を実行する
- ミューテックスの獲得
- コマンド実行結果依存に操作
Installing Hooks
Example Hooks
- 作成したリポジトリにはデフォルトでサンプルが配置されている
ls .git/hooks/
applypatch-msg.sample post-update.sample pre-push.sample prepare-commit-msg.sample
commit-msg.sample pre-applypatch.sample pre-rebase.sample update.sample
fsmonitor-watchman.sample pre-commit.sample pre-receive.sample
- デフォルトは所定の場所のテンプレートからコピーされる
ls /usr/share/git-core/templates/hooks
applypatch-msg.sample post-update.sample pre-push.sample prepare-commit-msg.sample
commit-msg.sample pre-applypatch.sample pre-rebase.sample update.sample
fsmonitor-watchman.sample pre-commit.sample pre-receive.sample
Creating Your First Hook
--no-verify
オプションでpre-commit, commit-msgフックをバイパスできたりする
Available Hooks
- いろいろある
- Commit-Related Hooks
- Patch-Related Hooks
- Push-Related Hooks
- Other Local Repository Hooks
英語
- at first blush
- entice
- smuggle
- innocuous
- countermand