在 bash 脚本中,我执行
git push
我检查它的退出状态。
在远程服务器上有一个 post-receive 钩子可以做一些事情。如果发生错误,接收后挂钩将以非零值退出。
但是,当 post-receive 钩子出错时, git push 正常退出。除非我专门检查特定错误字符串的输出(我不是),否则我的脚本认为一切正常。
有没有一种简单的方法可以确定接收后挂钩是否失败?
在 bash 脚本中,我执行
git push
我检查它的退出状态。
在远程服务器上有一个 post-receive 钩子可以做一些事情。如果发生错误,接收后挂钩将以非零值退出。
但是,当 post-receive 钩子出错时, git push 正常退出。除非我专门检查特定错误字符串的输出(我不是),否则我的脚本认为一切正常。
有没有一种简单的方法可以确定接收后挂钩是否失败?
所以答案是否定的,没有办法轻松检查 post-receive 挂钩是否失败。您可以做的最好的事情是让您的脚本检查远程输出,并确保您的接收后挂钩回显您正在寻找的错误消息。
在我的情况下,预接收挂钩将不起作用,因为我正在推送到另一个备份存储库,并且必须先接受新的提交,然后才能推送它。
基本上,接收后挂钩应该执行以下操作:
some-command-that-might-fail
RC=$?
if [ $RC -eq 0 ]; then
echo -e "\nERROR: some-command-that-might-fail FAILED!!!!!!!! PANIC!!!!!!\n"
fi
然后执行推送的脚本应该对 FAILED 或 ERROR 或 PANIC 的输出进行 grep 并报告接收后错误。
引用http://www.kernel.org/pub/software/scm/git/docs/githooks.html#post-receive:
post-receive
...
这个钩子不会影响 git-receive-pack 的结果,因为它是在实际工作完成后调用的。
也许pre-receive 钩子更适合您的目的,尽管没有提到传输的返回码。