git pre-push hook,如果是--tags则不运行

时间:2013-12-12 18:42:01

标签: git githooks git-tag

我有一个用于测试我的代码的预刷钩子,但是,当我执行git push --tags时它也会运行。有什么方法可以避免这种情况吗?

也许有一些方法可以检查它是否是常规推送或是--tags推送?

更新 - 这是我能找到的唯一参数:

  • $ 1是远程
  • 的名称
  • $ 2是推送正在进行的网址

4 个答案:

答案 0 :(得分:6)

我有一个解决方案,但它真的 kludgey。前段时间,我设置了一个预提交钩子,以阻止我在文件播放时意外使用-a。我的解决方案是读取调用原始git命令的命令(也可能只适用于linux )。

while read -d $'\0' arg ; do
    if [[ "$arg" == '--tags' ]] ; then
        exit 0
    fi
done < /proc/$PPID/cmdline
# and perform your check here

Original

话虽如此,试着在钩子中呼叫env; git设置了一些额外的变量(从GIT_前缀开始,如GIT_INDEX_FILE)。

答案 1 :(得分:2)

您可以使用env变量来控制它:

#.git/hooks/pre-push
if [[ $SKIP_HOOKS ]]; then
    exit 0
fi
# do things you want...

并运行如下命令:

SKIP_HOOKS=true git push --tags

答案 2 :(得分:1)

你可以在你想要运行的任何东西之前将它放在你的钩子中:

# If pushing tags, don't test anything.
grep "refs/tags/" < /dev/stdin > /dev/null
if [ "$?" -eq "0" ] ; then
    exit 0
fi

如果stdin的第一行引用了一个标记,它将退出0并推送。它并不完美,因为如果你同时推动一个标签和一个分支,它可能会首先看到标签,而不会运行其余的挂钩。但它在大多数情况下都有效。

答案 3 :(得分:0)

您正在寻找 --no-verify 标志。所以:

git push --tags --no-verify

这就是 git help push 告诉您有关该标志的信息:

       --[no-]verify
           Toggle the pre-push hook (see githooks(5)). The default is --verify, giving the hook a chance to prevent the push.
           With --no-verify, the hook is bypassed completely.