Github推送错误:RPC失败;result=22,HTTP代码=413。

168

目前Github出现了一个愚蠢的问题。 我有很多变更(大小约为120MB),当我尝试推送时,就会出现以下情况:

error: RPC failed; result=22, HTTP code = 413
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly

我已经执行了git config http.postBuffer 524288000,所以那似乎不是问题所在。这可能是什么原因呢?


4
未来的访客,如果你收到HTTP code = 0错误提示,表示GitHub崩溃了,就像昨天一样。 - StackExchange User
4
我的代理被阻止时,收到了“HTTP code = 0”的提示。我的HTTP代理可以与GitHub一起使用,但HTTPS不能,因为公司代理要求使用NTLM,而HTTP则接受BASIC。我将仓库原始URL从https更改为http,这对我起作用了。请使用以下命令更改存储库的远程URL:git remote set-url origin http://github.com/GitUserName/GitRepoName.git - Motomotes
20个回答

275
如果您遇到错误413,则问题并不在于git,而是在于您的Web服务器。这是由于您的Web服务器阻止了大型上传文件。
nginx解决方案
只需加载您的“nginx.conf”文件,并在http块中添加“client_max_body_size 50m;”(根据您的需要更改值)即可。
通过执行“sudo service nginx reload”重新加载nginx以接受新配置,并再次尝试通过http推送提交。
Apache解决方案
在您的“httpd.conf”文件中,在“”块内添加“LimitRequestBody 52428800”(根据您的需要更改值)。通过这种方式,您可以限制整个服务器文件系统、单个虚拟主机或目录的请求。

3
对我来说,50米不够,但这解决了我的问题!谢谢! - Kevin C. Krinke
我还必须在一个中间的nginx代理上执行这个操作。 - jperelli
2
如果您没有使用Nginx呢? - Katianie
有关 GitLab Omnibus 安装的任何解决方案吗?最新版本为 12.1。 - shashwat
经过长时间的搜索、咒骂和哭泣(按照这个顺序),我发现嵌入式配置文件位于以下位置:/var/opt/gitlab/nginx/conf/gitlab-http.conf。 - virtualadrian
显示剩余5条评论

59

我想通了!!! 当然,就在我发帖之后!

我将仓库设置为使用 HTTPS 地址,我将其更改为 SSH 地址后,一切都恢复正常了。


67
这不是问题的原因,那只是一个变通方法。我想知道为什么它在https上失败了。 - Steve Walsh
4
对我来说,SSH不是一种选择。所以如果你处于与@ZincX相同的情况,请参阅我上面的答案。 - Tinou
3
这只是一个解决方法。Tinou的答案应该被采纳为最佳答案。 - Ben
1
你是怎么改变那个的? - Dainius Kreivys
1
许多人可能无法访问他们的Web服务器,因此这些信息非常有用! - Matthew
那该死的HTTP缓冲数据包!! - andrea.rinaldi

39

更改远程URL的命令(从https -> git@...)大致如下:

git remote set-url origin git@github.com:GitUserName/GitRepoName.git

这里的 origin 是我的远程名称(执行 git remote 命令会显示出你的 origin)。


2
在Bitbucket(“克隆”按钮)中,当我从ssh:// git @ <bitbucket-repo>:<port> / dir / to / project.git中删除了ssh://时,我遇到了问题。所以小伙伴们要小心! - fightlight

18

我遇到了同样的问题,但是我在使用反向代理。

因此,我不得不进行设置。

client_max_body_size 50m; 

两个配置文件都要修改:

  • 在GitLab Nginx Web服务器上(如前面的回答所述)
  • 同时也要在独立服务器上托管的Nginx反向代理上进行修改。

有没有关于GitLab Omnibus安装的解决方案..? - shashwat
也许可以看一下 Omnibus/Nginx 配置文件: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#inserting-custom-settings-into-the-nginx-config - grimabe
感谢您提供的解决方案,我正好需要这个设置。 - tjeerdnet

13

如果您在推送大量更改时遇到此问题,则在终端中运行以下命令。

git config --global http.postBuffer 157286400

详见此处获取更多细节。


6

我在git URL中已经有了“HTTPS//”,但仍然遇到了这个错误。

我所做的就是使用push选项 -u,它就能正常工作了。

git push -u origin master


4

对于那些使用 IIS 7 托管 git http/https 端点的用户:

您需要增加您的 uploadReadAheadSize

打开 Internet Information Services (IIS) Manager

  1. 展开服务器字段

  2. 展开站点

  3. 选择要进行修改的站点。

  4. 在功能部分,双击 Configuration Editor

  5. Section 下选择:system.webServer > serverRuntime

  6. 修改 uploadReadAheadSize 部分(值必须介于 02147483647 之间)

  7. 点击 Apply

  8. 重新启动网站


为了重新启动网站,我选择了“默认网站”,在右侧的“操作”下有“停止”和“启动”按钮。 - jgoeders
在IIS 10中仍需要进行此修复。 - jgoeders
修改uploadReadAheadSize对我无效,将“IIS->Git Site->Features->Request Filtering->Edit Feature Setting”中的“Maximum allowed content length”更改为比git要上传的大小更大的值(在我的情况下,39.28 MiB大于30_000_000字节)有所帮助。(git将在push命令输出中显示请求大小) - Homayoun Behzadian

2

您是否使用https链接而不是ssh链接?因为使用https链接上传的大小受到HttpServer(如Apache、Ngnix)的限制,而使用ssh时没有此限制。

使用以下方法切换到ssh链接。

  1. 打开终端。
  2. 切换到项目的工作目录。
  3. 获取远程仓库的名称。
$ git remote -v
origin  https://github.com/[user_name]/[project_name].git (fetch)
origin  https://github.com/[user_name]/[project_name].git (push)
  1. 将git地址修改为ssh链接。
git remote set-url origin git@github.com:[user_name]/[project_name].git

如果您确定远程仓库的名称,请直接执行第4步。现在,您可以愉快地进行推送操作了。


1
需要将远程URL更改为ssh或https。
git remote set-url origin git@github.com:laravel/laravel.git

或者

git remote set-url origin https://github.com/laravel/laravel.git

希望这能有所帮助 :)

1
当我尝试在Linux机器上克隆git仓库时,遇到了这个问题。
以下URL在Windows上对我有效。
http://swamy@git.swamy.com/scm/project/swamy-main.git

以下URL在Linux机器上有效,并且其URL中包含https。
https://swamy@git.swamy.com/scm/project/swamy-main.git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接