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

asf*_*ows 5 git githooks

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

对于我正在进行的项目,我们只是添加了一个post-checkout钩子,我们要求整个团队使用.

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

有没有办法在一个git-hook触发器上执行多个脚本?我希望每个人都git checkout执行整个团队的post-checkout钩子执行我的个人post-checkout钩子.我不能将两个文件命名为同一个东西 - 有没有办法解决这个问题?

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

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

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

lar*_*sks 6

当然.创建一个post-checkout调用其他脚本的包装器钩子脚本:

#!/bin/sh

$GIT_DIR/hooks/my-tmux-post-checkout "$@"
$GIT_DIR/hooks/corporate-post-checkout "$@"
Run Code Online (Sandbox Code Playgroud)

您可以在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
Run Code Online (Sandbox Code Playgroud)

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