我的git push操作在大约25-30秒内完成,而不是(或多或少)立即返回。 我正在使用我在这里找到的一个很长的收件后(bash)脚本:https://raw.github.com/zma/usefulscripts/master/script/post-receive
一些细节:
我做了一些测试,如果接收后脚本包含大约70行已注释掉(因此脚本什么都不做),推送会有大约5秒的延迟。
这是正常的吗? 或者有没有办法加快推动? 或者我必须大幅减少脚本大小?
更新 重要的是要提到:
答案 0 :(得分:2)
一个有趣的跟进: 我已经在另一台PC上测试了脚本,它运行正常。没有延迟。因此,我的电脑上存在一些关于git如何处理远程脚本的问题。
远程存储库位于samba共享上。我采用了两种方案的wireshark跟踪:
cat <path_to_the_script>\post-receive
命令real
git push 结果(没有太多技术细节):
结论: git push命令以1字节块的形式读取接收后脚本
答案 1 :(得分:1)
git hooks page明确提及post-receive
钩子:
此脚本无法停止推送过程,但客户端在完成之前不会断开连接;所以,当你尝试做任何可能需要很长时间的事情时要小心。
这意味着,在您的情况下,您需要切换到异步方法(除非您可以修复需要时间的内容,例如Sqeezer的answer,upvoted,似乎建议):
这样,post-receive hook尽可能快地返回,而不是阻塞客户端(从推出的推送位置开始的下游repo)
答案 2 :(得分:1)
从剧本描述
# An example hook script to mail out commit update information. This hook
# sends emails listing new revisions to the repository introduced by the
# change being reported. The rule is that (for branch updates) each commit
# will appear on one email and one email only.
然后看一下脚本的底部。它说:
# Note: change the smtp server to yours
cat $email_tmp_file | mailx -S smtp="smtp://smtp.cse.ust.hk" -s "$emailsubject" -r $senderemail $recipients
我相信您尚未配置smtp服务器,因此您的脚本正在等待smtp.cse.ust.hk
连接,然后只是超时断开连接。
答案 3 :(得分:1)
事实证明,samba共享被配置为不在smb.conf中使用具有以下选项的oplock:
从共享配置中删除这些条目会将接收后执行的延迟减少到大约4-5秒,这是合理的。