运行本地和全局git钩子

lzfw57am  于 2023-05-21  发布在  Git
关注(0)|答案(2)|浏览(123)

我有一个全局git钩子post-commit,它位于:

~/.git_templates/hooks/post-commit

我已经使它全球化了

git config --global init.templatedir '~/.git_templates'

使用git init更新我的git项目的设置。
然而,有一个项目在下面有自己的post-commit钩子:

~/src/git.repo/.git/hooks/post-commit

本地一个运行,但阻止全局一个运行。我怎样才能实现两者都在提交后运行?
我想避免在本地提交后钩子中添加命令。

avwztpqn

avwztpqn1#

可以设置全局钩子路径。

git config --global core.hooksPath "$CONFIG_DIR/hooks"

这将忽略本地钩子并只运行全局钩子脚本。
另外如果要同时运行本地和全局钩子,可以手动从全局钩子调用本地钩子。
例如:从全局pre-commit钩子调用此脚本。

...
/path/to/run-local-hook pre-commit

run-local-hook文件:

# Run local hook if exists
HOOK=$1
PROJECT_ROOT=$(git rev-parse --show-toplevel)

if [ -e "$PROJECT_ROOT/.git/hooks/$HOOK" ]; then
  $PROJECT_ROOT/.git/hooks/$HOOK "$@"
else
  exit 0
fi
kgqe7b3p

kgqe7b3p2#

可能的变通方法是:

  • 以确保为所有用户部署了全局钩子
  • 修改你的全局钩子来调用一个预先约定好的脚本,如果用户愿意的话,这个脚本可以由用户来设置。例如$GIT_DIR/hooks/my-post-commit

my-post-commit不是一个标准的客户端钩子名称,所以它不会被Git自动运行。
只有你的全局钩子会这样做,它会调用用户设置的客户端自定义脚本。
这并不能改变这样一个事实,即如果本地$GIT_DIR/hooks/post-commit确实存在,它仍然会阻止全局钩子的运行。

相关问题