多个git钩子用于相同的触发器

时间:2015-05-07 14:40:50

标签: git githooks

我有一个post-checkout钩子,我在我的所有回购中使用本地(它将我的tmux会话重命名为repo-name/branch-name

对于我正在处理的项目,我们刚刚添加了一个post-checkout钩子,我们要求整个团队使用。

我不想将我个人钩子的逻辑添加到团队范围的钩子中,因为它对每个人都没用,但我也不想放弃它。

有没有办法在单个git-hook触发器上执行多个脚本?我希望每个git checkout执行全组合post-checkout挂钩执行我的个人post-checkout挂钩。我不能将两个文件命名为同一个东西 - 有没有办法解决这个问题?

更新:一个好方法是,“make post-checkout调用另外两个脚本。我喜欢这个想法,它可能就是解决方案。

但是,现在我们有一个自动设置步骤,将post-checkout复制到hooks目录中。如果可能的话,我想以不干扰现有团队设置的方式执行此操作,如果我稍后再次运行该安装步骤,则不需要手动调整。

如果那不可能,那很酷,但我对更有创意的解决方案感到好奇。

1 个答案:

答案 0 :(得分:6)

不确定。创建一个调用其他脚本的包装器post-checkout钩子脚本:

#!/bin/sh

$GIT_DIR/hooks/my-tmux-post-checkout "$@"
$GIT_DIR/hooks/corporate-post-checkout "$@"

你可以在post-checkout.d目录中的任意数量的脚本中获得更好的动画并进行迭代,但基本思路是相同的。

史蒂夫的更新

对于期望在stdin上输入的脚本:

#!/bin/sh

tmpfile=$(mktemp hookXXXXXX)
trap "rm -f $tmpfile" EXIT
cat > $tmpfile

$GIT_DIR/hooks/my-tmux-post-checkout "$@" < $tmpfile
$GIT_DIR/hooks/corporate-post-checkout "$@" < $tmpfile

这对于第一种情况实际上也应该是无害的,尽管如果你通过手动运行它来测试它,你需要确保你总是从某个地方重定向stdin(可能是/dev/null)。