同一触发器的多个 git 挂钩
Multiple git hooks for the same trigger
我有一个 post-checkout
挂钩,我在所有回购协议中都在本地使用它(它将我的 tmux 会话重命名为 repo-name/branch-name
)
对于我正在处理的项目,我们刚刚添加了一个 post-checkout
挂钩,我们要求整个团队使用它。
我不想把我个人hook的逻辑加入到团队范围的hook中,因为它对每个人都没有用,但我也不想放弃。
有没有办法让多个脚本在单个 git-hook 触发器上执行?我希望每个 git checkout
执行团队范围的 post-checkout
挂钩 和 执行我个人的 post-checkout
挂钩。我不能让两个文件同名 - 有没有办法解决这个问题?
更新: 一个好的方法是,“让 post-checkout
调用另外两个脚本。我喜欢这个想法,它可能是解决方案。
但是,现在我们有一个自动设置步骤,可以将 post-checkout
复制到 hooks 目录中。如果可能的话,我希望以一种不会干扰现有团队设置的方式进行,并且如果我 运行 稍后再安装步骤。
如果那不可能,那很好,但我对更有创意的解决方案很好奇。
当然可以。创建一个包装器 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
这对于第一种情况实际上也应该是无害的,尽管如果您通过 运行 手动测试它,您将需要确保始终从某个地方重定向标准输入(可能 /dev/null
).
我有一个 post-checkout
挂钩,我在所有回购协议中都在本地使用它(它将我的 tmux 会话重命名为 repo-name/branch-name
)
对于我正在处理的项目,我们刚刚添加了一个 post-checkout
挂钩,我们要求整个团队使用它。
我不想把我个人hook的逻辑加入到团队范围的hook中,因为它对每个人都没有用,但我也不想放弃。
有没有办法让多个脚本在单个 git-hook 触发器上执行?我希望每个 git checkout
执行团队范围的 post-checkout
挂钩 和 执行我个人的 post-checkout
挂钩。我不能让两个文件同名 - 有没有办法解决这个问题?
更新: 一个好的方法是,“让 post-checkout
调用另外两个脚本。我喜欢这个想法,它可能是解决方案。
但是,现在我们有一个自动设置步骤,可以将 post-checkout
复制到 hooks 目录中。如果可能的话,我希望以一种不会干扰现有团队设置的方式进行,并且如果我 运行 稍后再安装步骤。
如果那不可能,那很好,但我对更有创意的解决方案很好奇。
当然可以。创建一个包装器 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
这对于第一种情况实际上也应该是无害的,尽管如果您通过 运行 手动测试它,您将需要确保始终从某个地方重定向标准输入(可能 /dev/null
).