Closed5
git hooksのローカル・グローバルの実行パターン
ピン留めされたアイテム
結果。
global core.hooksPathを 指定しない |
global core.hooksPathを 指定する |
|
---|---|---|
local core.hooksPathを 指定しない |
ローカルの .git/hooks が実行される(あれば) |
global core.hooksPathのフックが実行される |
local core.hooksPathを 指定する |
local core.hooksPathのフックが実行される | local core.hooksPathのフックが実行される |
フックはスコープ(global, local)ごとに実行されるわけではない。
単純にリポジトリルートで git config core.hooksPath
で返されるディレクトリに存在するフックを実行する。
※ git configの優先度(読み込み順)はシステム → グローバル → ローカル 参考
デフォルトの .git/hooks
とカスタム指定の core.hooksPath
でグローバル・ローカルが動く、動かないという記事を見たが、諸説ありそうなので検証する。
パターンは以下。
global .git/hooks | global core.hooksPath | |
---|---|---|
local .git/hooks | ||
local core.hooksPath |
local .git/hooks x global .git/hooks
git config core.hooksPath
#=> ""
git config --global core.hooksPath
# => ""
echo '#!/bin/sh
echo "local pre-commit"' >> .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
touch sample
git add .
git commit -m "sample"
#=>
local pre-commit
デフォルトではグローバルフックはないから、当然この場合はローカルのフックが正しく動作する。
local .git/hooks x global core.hooksPath
mkdir -p ~/sample-githooks
echo '#!/bin/sh
echo "global pre-commit"' >> ~/sample-githooks/pre-commit
chmod +x ~/sample-githooks/pre-commit
git config --global core.hooksPath ~/sample-githooks
touch sample
git add .
git commit -m "sample"
#=>
global pre-commit
グローバルフックのみ実行される。
local core.hooksPath x global core.hooksPath
mkdir -p ./githooks
echo '#!/bin/sh
echo "local custom pre-commit"' >> ./githooks/pre-commit
chmod +x ./githooks/pre-commit
git config core.hooksPath ./githooks
touch sample
git add sample
git commit -m "sample"
#=>
local custom pre-commit
ローカルのカスタムフックのみ実行される。
このスクラップは2024/01/23にクローズされました