【问题标题】:catching a git post-receive error in a script在脚本中捕获 git post-receive 错误
【发布时间】:2012-10-09 07:02:41
【问题描述】:

在 bash 脚本中,我做了一个

git push

然后我检查它的退出状态。

在远程服务器上有一个 post-receive 钩子可以做一些事情。如果发生错误,接收后挂钩将以非零值退出。

但是当 post-receive 钩子出错时,git push 会正常退出。除非我专门检查特定错误字符串的输出(我不是),否则我的脚本认为一切正常。

有没有一种简单的方法可以让我确定接收后挂钩是否失败?

【问题讨论】:

  • 如何检查git push 命令的输出 而不仅仅是它的退出状态?也许在输出中的某处可以检测到钩子故障,其格式为:<flag> <summary> <from> -> <to> (<reason>)。只是大声思考......
  • 这就是我真正想要避免的。但是,如果我不能在接收后错误时让 git exit 出错,那么我想这就是我必须做的。

标签: git bash git-bash git-post-receive


【解决方案1】:

所以答案是否定的,没有办法轻松检查 post-receive 挂钩是否失败。您可以做的最好的事情是让您的脚本检查远程输出,并确保您的接收后挂钩回显您正在寻找的错误消息。

在我的情况下,预接收挂钩不起作用,因为我正在推送到另一个备份存储库,并且必须先接受新的提交,然后才能推送它。

基本上 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 并报告接收后错误。

【讨论】:

    【解决方案2】:

    引用http://www.kernel.org/pub/software/scm/git/docs/githooks.html#post-receive:

    收到后
    ...
    这个钩子不会影响 git-receive-pack 的结果,因为它是在实际工作完成后调用的。

    也许pre-receive hook 更适合您的目的,尽管没有提及传输的返回码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2013-04-14
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多