Git全局挂钩和项目挂钩

Vis*_*oor 8 git githooks

目前我正在使用

git config --global core.hooksPath ~/.git/hooks
Run Code Online (Sandbox Code Playgroud)

为我所有的git项目配置全局挂钩。但是,如果这些项目包含挂钩,则它们不会运行。

我想运行全局挂钩以及项目挂钩。谢谢!

phd*_*phd 6

我认为唯一的方法是让全局挂钩检查是否存在相应的本地挂钩并运行它。

这不是一个完整的解决方案,因为某些挂钩(pre-push例如)除了接受命令行参数外,还接受标准输入。如果其中一个钩子消耗了标准输入,则另一个钩子没有机会。


Spa*_*ker 5

为了从全局钩子中执行本地钩子,可以使用以下脚本片段:

if [ -e ./.git/hooks/commit-msg ]; then
    ./.git/hooks/commit-msg "$@"
fi
Run Code Online (Sandbox Code Playgroud)

全局挂钩在进行提交的存储库目录中运行,因此可以检查其.git目录中是否存在本地挂钩。

请注意,如果您使用的内容与提交消息挂钩不同,则必须采用挂钩名称。

  • 这不是一个完整的解决方案,因为某些钩子(例如,[`pre-push`](https://git-scm.com/docs/githooks#_pre_push))除了命令行参数之外还接受标准输入。如果其中一个钩子消耗了标准输入,则另一个钩子就没有机会。 (3认同)