我有一个大型的预挂钩脚本,我维护它来运行代码检查,构建,运行回归,并通过电子邮件发送一组发行说明。它已经工作了一段时间,但是最近做了一些更改,现在当我们执行git push时会导致“Broken pipe”错误。我的所有更改都没有显示可能导致管道错误的任何内容。
我尝试使用GIT_TRACE和strace运行,对我来说这似乎并不是什么问题:
... Email Sent Successfully No errors!
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 125625
--- SIGCHLD (Child exited) @ 0 (0)
--- write(4, "009c4a23dfcd66ae44d23435e45a2371"..., 156) = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0)
--- +++ killed by SIGPIPE +++
答案 0 :(得分:2)
需要预推钩来读取其标准输入,该标准输入由the githooks documentation中描述的一系列形式的行组成。也就是说,输入可以是多个行,而不仅仅是一行。有时它可能只是一行,但有时它会更多。
如果您的预推钩无法读取标准输入的所有,并且Git会写入大量输入,Git写入现在关闭的管道将导致{{ 1}}错误和EPIPE
信号。由于发生这种情况,您不必阅读整个输入。要修复它,请阅读其余输入。
答案 1 :(得分:0)
是的,答案确实是ServerAliveInterval计时器。服务器关闭,因此失败了。