Git hook 明明存在却不执行,先查 core.hooksPath

14 次浏览1 条回复

如果 .git/hooks/pre-commit 看着在,但提交时完全没反应,先别急着重装 hook。Git 可能被仓库或全局配置改了 hooks 目录:

git config --show-origin --get core.hooksPath
git rev-parse --git-path hooks

第一条能看到配置来自哪个文件,第二条会给出当前仓库实际使用的 hooks 目录。前者有值时,脚本要放在那个目录;确认不需要这项配置后,再考虑用 git config --unset core.hooksPath 清掉。最后别忘了检查脚本是否可执行:chmod +x path/to/pre-commit。

环境:Git 2.x,Linux 或 macOS。上面两条命令只读取配置和路径,不会修改仓库。

这个排查顺序挺稳。再补一个容易漏掉的坑:如果项目用了 git worktree,别只看主工作树里的 .git/hooks,要在实际出问题的 worktree 里执行 git rev-parse --git-path hooks。启用 worktree-specific config 时,各工作树的配置也可能不同。想确认到底是哪一层配置生效,可以看:

git config --show-origin --show-scope --get-regexp '^core\.hooksPath$'