当将提交推送到github时Git失败


130

我将我在github上托管的git repo克隆到了笔记本电脑上。我能够顺利地将几个提交成功推送到github。但是,现在出现以下错误:

Compressing objects: 100% (792/792), done.
error: RPC failed; result=22, HTTP code = 411
Writing objects: 100% (1148/1148), 18.79 MiB | 13.81 MiB/s, done.
Total 1148 (delta 356), reused 944 (delta 214)

从这里开始挂起,最后我必须CTRL+ C返回终端。


为什么会有HTTP错误?您不通过SSH推送到github吗?
卡斯卡贝尔

需要说明的是:origin部分中的url .git/config不说http,是吗?
卡斯卡贝尔

@Jefromi我使用读/写http链接克隆了我的私人仓库。
斯蒂芬·梅尔文

不,它说https。这很奇怪,因为我已经能够在失败之前进行两次推送。
斯蒂芬·梅尔文

Answers:


292

我遇到了同样的问题,并认为这与您要推送的存储库的大小(已编辑或特定文件的大小)有关。

基本上,我能够创建新的存储库并将其推送到github。但是,现有的将不起作用。

HTTP错误代码似乎为我提供了支持,这是一个“所需长度”错误。因此,可能太大而无法计算或增大最大值。谁知道。

编辑

我发现问题可能出在大型文件上。我有一个更新,即使我成功推送到那个点也不会推送。提交中只有一个文件,但恰好是160万

所以我添加了以下配置更改

git config http.postBuffer 524288000

为了允许最大文件大小为500M,然后我进行了推送。最初可能是通过HTTP协议推动大量回购的问题。

结束编辑

我可以使它工作的方式(在修改postBuffer之前先进行编辑)是将我的存储库打包,将其复制到可以通过ssh执行git的计算机,然后将其推送到github。然后,当您尝试从原始服务器进行推/拉时,它应该可以通过https进行工作。(因为它的数据量比原始推送要少得多)。

希望这可以帮助。


尽管我遇到了HTTP 501错误而不是411错误,但对我来说也很有效。谢谢!
Emaad Ahmed Manzoor 2011年

谢谢!这样行之有效,甚至加快了上传速度。试图将网站推送到新的Windows Azure网站,但它一直失败。
2012年

23
仅将此值设置得很高会有不利之处吗?
snogglethorpe

@snogglethorpe潜在地:“传输编码:分块用于避免在本地创建大型打包文件”。如果将值设置为巨大值,则在尝试推送时最终可能会生成大量打包文件。并非所有文件系统都能很好地处理海量文件,并且它们可能无法有效修剪。您可以在.git / objects / pack中看到这些文件。

改变http.postBuffer是更不必要比有害的,但有一个负的副作用:增加它的默认以上可能会增加延迟较大推(因为客户端将缓冲HTTP请求到更大的块)。
Swatantra Kumar,

8

如果此命令无济于事

git的配置http.postBuffer 524288000

尝试将ssh方法更改为https

git remote -v
git remote rm origin 
git remote add origin https://github.com/username/project.git

4

看起来像服务器问题(即“ GitHub”问题)。
如果您看一下这个线程,它可能在git-http-backend堆损坏时发生(并且由于它们只是放置了一个聪明的http支持
而已...),但是无论实际原因是什么,它也可能与最近的零星中断有关。 GitHub文件服务器之一

您仍然看到此错误消息吗?因为如果这样做:

  • 检查您本地的Git版本(并升级到最新版本)
  • 将其报告为GitHub错误

注意:智能HTTP支持对于我们这些基于身份验证的企业防火墙代理背后的人来说意义重大!

从现在开始,如果您通过http://url 克隆存储库,并且使用的是1.6.6或更高版本的Git客户端,Git将自动使用更新更好的传输机制。
但是,更令人惊奇的是,您现在可以推送该协议并克隆私有存储库。如果您访问私有存储库,或者您是协作者并希望推送访问,则可以将用户名放在URL中,当您尝试访问它时,Git会提示您输入密码。

较老的客户也将退回到较旧的,效率较低的方式,所以什么都不会破坏-只有较新的客户才能更好地工作。

同样,请确保首先升级您的Git客户端。


我在ADSL无线路由器(法语Orange Livebox)背后遇到了类似的麻烦:无法在github.com上发布我的SSH密钥,无法通过https推送...直到我使用备用Internet访问。
伊夫·马丁

当我尝试“推送:错误:RPC失败;结果= 22,HTTP代码= 0”时,智能HTTP支持设法使我通过防火墙代理。
Boggin 2013年

@Boggin是的,我确认当一个代理位于背后时,通常首选智能http。标准的http / https端口始终处于打开状态。
VonC


0

我试图推送到我自己的托管的bonobo-git服务器,但没有意识到,http.postbuffer意味着项目目录...

因此,对于其他困惑的人:

为什么?就我而言,我有一个带有资产的大型zip文件以及一些PSD,这些PSD也被推入了缓冲区-我猜是很大。

如何执行此操作http.postbuffer:在项目src目录中的.git文件夹旁边而不是在服务器上执行该命令。

请注意,将创建具有该缓冲区大小的大型临时文件。

注意:仅检查最大的文件,然后设置缓冲区。


-2

推送的主要问题是由于需要推送的文件大小。我试图推送一些大小仅为2 mb的库,然后推送也使RPC错误返回结果7。该行的速度为4 mbps,并且工作正常。随后的一些尝试使我成功。如果出现此类错误,请等待几分钟,然后继续尝试。

我还发现,如果github出现故障或网络变得不稳定,则存在RPC失败。

因此,在一定间隔后继续尝试是唯一的选择!


-2

在这些情况下,如果https卡住了,您可以尝试ssh。

您也可以尝试将缓冲区大小增加到一个天文数字,这样您就不必再担心缓冲区大小了git config http.postBuffer 100000000

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.