当我通过git部署到heroku时,slug构建成功完成但之后我得到了一个git协议错误:
$ git push heroku -f v0.0.20:refs/heads/master
(...)
remote: -----> Compressing...
remote: Done: 55.3M
remote: -----> Launching...
remote: Released v40
remote: https://....herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
fatal: protocol error: bad line length character: erro
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'https://git.heroku.com/....git'
我已经尝试手动SSH到git服务器进行调试,但是没有成功,tcpdump因SSL而无用。
ssh git@heroku.com "git-upload-pack ....git"
没有产生任何可疑之处:
00c93a701c509d5730ba92e91463707699721929d477 HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master agent=git/1.9.1
003f3a701c509d5730ba92e91463707699721929d477 refs/heads/master
0000
我接触过heroku支持,他们试图将相同的代码推送到同一个应用程序,但这样做有效。
我会感谢任何有关如何调试该问题的建议。
答案 0 :(得分:2)
很难调试,但同时我发现了正在发生的事情:
我用以下命令推送代码:
git push heroku -f v0.0.20:refs/heads/master
通过将远程服务器从HTTPS URL更改为SSH URL,我收到了一条有用的错误消息:error: Trying to write non-commit object a3ab0fb2fda8d778850b3cbfc88e7e865d95daac to branch refs/heads/master
让我意识到,我无法将git标签对象推送到远程分支参考。
这个问题有一个简单的解决方案:
git push heroku -f v0.0.20^{}:refs/heads/master
来自gitrevisions
手册页:
<rev>^{}
,例如v0.0.20^{}
后缀^
后跟空括号对({}
)表示对象可以是标记,并递归取消引用标记,直到找到非标记对象。
换句话说:找到标签引用的最后一次提交。