Git 2.54: フックを .git/hooks に置かず、設定ファイルで定義して複数リポジトリで共有する
Git 2.54 から [hook "名前"] に event と command を書くと、.git/hooks/ にスクリプトをコピーしなくてもフックが動く。グローバル設定に書けば全リポジトリで同じリンターや秘密情報チェックを走らせられ、1 つのイベントに複数のフックも登録できる。
書き方
ini
# ~/.gitconfig(全リポジトリ)や .git/config(そのリポジトリだけ)
[hook "linter"]
event = pre-commit
event = pre-push # event は複数書ける
command = ~/bin/linter --strict
[hook "no-leaks"]
event = pre-commit # 同じイベントに 2 つ目のフック
command = gitleaks protect --stagedコマンドで設定する場合:
sh
git config set --global hook.no-leaks.command "gitleaks protect --staged"
git config set --global --append hook.no-leaks.event pre-commit確認:
sh
git hook list pre-commit --show-scope # どのスコープの設定から来ているか表示- 同じイベントに複数登録したフックは、設定ファイルに現れた順に実行される。
.git/hooks/に従来のスクリプトがあれば最後に実行される。 - グローバルに入れたフックを特定のリポジトリでだけ止めるときは
hook.<名前>.enabled = false。
注意点
- フックの名前に
pre-commitなどイベント名そのものは使えない(エラーになる)。 enabled・parallel・hook.jobsなどは 2.54 以降の版で追加・変更されているので、使う前に手元のgit help hookで確認する。- チーム全体に配る仕組みではない(設定ファイルはリポジトリに含まれない)。共有したいなら include した設定ファイルを配るか、従来どおり husky / lefthook などを使う。
出典
- @t_wada · 2026-04-24
- Git ドキュメント
git-hook: git-scm.com/docs/git-hook