テック技報最新号へ →
コード

Git 2.54: フックを .git/hooks に置かず、設定ファイルで定義して複数リポジトリで共有する

Git 2.54 から [hook "名前"] に event と command を書くと、.git/hooks/ にスクリプトをコピーしなくてもフックが動く。グローバル設定に書けば全リポジトリで同じリンターや秘密情報チェックを走らせられ、1 つのイベントに複数のフックも登録できる。

@t_wada · 投稿 2026-04-24
#git#hooks#config

書き方

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 などを使う。

出典

X の元の投稿を開く