Heroku / Git:协议错误:行长字符错误:错误

时间:2017-02-01 12:08:24

标签: git heroku

当我通过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支持,他们试图将相同的代码推送到同一个应用程序,但这样做有效。

我会感谢任何有关如何调试该问题的建议。

1 个答案:

答案 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^{}   后缀^后跟空括号对({})表示对象可以是标记,并递归取消引用标记,直到找到非标记对象。

换句话说:找到标签引用的最后一次提交。