我有一个用于测试我的代码的预刷钩子,但是,当我执行git push --tags
时它也会运行。有什么方法可以避免这种情况吗?
也许有一些方法可以检查它是否是常规推送或是--tags
推送?
更新 - 这是我能找到的唯一参数:
答案 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
话虽如此,试着在钩子中呼叫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.