除了 core.hooksPath 全局挂钩之外,如何 运行 本地 Git 项目挂钩?
How to run local Git project hooks in addition to core.hooksPath global hooks?
目前我正在使用
git config --global core.hooksPath ~/.git/hooks
为我的所有 git 项目配置全局挂钩。但是,如果这些项目包含挂钩,则它们不是 运行。
我想要 运行 全局挂钩和项目挂钩。谢谢!
我认为唯一的方法是让全局挂钩检查是否存在相应的本地挂钩并 运行 它。
这不是一个完整的解决方案,因为一些挂钩(例如 pre-push
)除命令行参数外还接受标准输入。如果其中一个钩子消耗了标准输入,另一个就没有机会了。
为了从全局钩子中执行本地钩子,可以使用以下脚本片段:
if [ -e ./.git/hooks/commit-msg ]; then
./.git/hooks/commit-msg "$@"
fi
全局挂钩在提交的 repo 目录中运行,因此可以检查其 .git
目录中是否存在本地挂钩。
请注意,如果您使用的不是提交消息挂钩,则必须采用挂钩名称。
每个挂钩都需要这样做,但我确认它适用于 prepare-commit-msg
。
# run the global prepare-commit-msg if it is present
if [ -e `git config --global core.hookspath`/prepare-commit-msg ]; then
`git config --global core.hookspath`/prepare-commit-msg "$@"
fi
# otherwise do nothing
我在 .husky/prepare-commit-msg
的文件中将其与 Husky 7 一起使用。也应该作为本地挂钩工作。
目前我正在使用
git config --global core.hooksPath ~/.git/hooks
为我的所有 git 项目配置全局挂钩。但是,如果这些项目包含挂钩,则它们不是 运行。
我想要 运行 全局挂钩和项目挂钩。谢谢!
我认为唯一的方法是让全局挂钩检查是否存在相应的本地挂钩并 运行 它。
这不是一个完整的解决方案,因为一些挂钩(例如 pre-push
)除命令行参数外还接受标准输入。如果其中一个钩子消耗了标准输入,另一个就没有机会了。
为了从全局钩子中执行本地钩子,可以使用以下脚本片段:
if [ -e ./.git/hooks/commit-msg ]; then
./.git/hooks/commit-msg "$@"
fi
全局挂钩在提交的 repo 目录中运行,因此可以检查其 .git
目录中是否存在本地挂钩。
请注意,如果您使用的不是提交消息挂钩,则必须采用挂钩名称。
每个挂钩都需要这样做,但我确认它适用于 prepare-commit-msg
。
# run the global prepare-commit-msg if it is present
if [ -e `git config --global core.hookspath`/prepare-commit-msg ]; then
`git config --global core.hookspath`/prepare-commit-msg "$@"
fi
# otherwise do nothing
我在 .husky/prepare-commit-msg
的文件中将其与 Husky 7 一起使用。也应该作为本地挂钩工作。