【问题标题】:Git, fatal: The remote end hung up unexpectedlyGit,致命:远程端意外挂断
【发布时间】:2013-02-20 20:36:04
【问题描述】:

当我尝试运行时

git push origin master --force

我刚刚得到

Counting objects: 2649, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (1280/1280), done.
error: RPC failed; result=22, HTTP code = 413 | 116 KiB/s   
fatal: The remote end hung up unexpectedly
Writing objects: 100% (2504/2504), 449.61 MiB | 4.19 MiB/s, done.
Total 2504 (delta 1309), reused 2242 (delta 1216)
fatal: The remote end hung up unexpectedly
Everything up-to-date

这与不安全有关吗?我尝试在Fatal: The remote end hung up unexpectedly 的答案中创建一个公钥并再次运行它,但它仍然不起作用。我实际上没有使用密钥吗?如果是这样,我该如何使用它?

【问题讨论】:

  • 请显示git remote -v的输出
  • git config http.postBuffer 524288000 # 它对我有用
  • 如果您收到error: could not lock config file .git/config: No such file or directory,请参阅stackoverflow.com/a/32329453/827525
  • 我无法获得任何建议的解决方案。然后我尝试了 GitKraken。它是少数几个不使用 git.exe 的 Git 程序之一。 GitKraken 可以做到。在 GitKraken 推送存储库后,我可以切换回 git.exe 并同步,没有任何问题。

标签: git github


【解决方案1】:

最近我遇到了同样的问题。克隆远程存储库时出现如下错误:

致命:远端意外挂断 MiB | 7.00 KiB/秒
致命:早期 EOF
索引包失败

当我用谷歌搜索错误时,我被重定向到这里。我遵循了大部分答案,但没有解决我的问题。

唯一的解决方案是重新安装我的“网络适配器 (WiFi) 驱动程序软件”。因此,我要强调的是,上述错误也可能是您 PC 的 WiFi 驱动程序软件中的问题引起的。如果上述答案都不起作用,那么您可以尝试重新安装 WiFi 驱动程序。它会解决这个问题。

您可以轻松地重新安装 WiFi 驱动程序,如下所示:

  1. 打开网络和互联网设置

  2. 选择“网络重置”

  3. 然后选择“立即重置”

重启电脑后,尝试 git 操作成功(推/拉/克隆)。

【讨论】:

    【解决方案2】:

    对我们而言,问题在于我们有大量文件本应由 git lfs 管理。

    我们采取了以下措施来解决问题:

    # Soft reset so you can author a new commit
    git reset --soft HEAD~1
    
    # Install git lfs
    git lfs install
    
    # Track large files of a specified file type YMMV
    git lfs track "*.uasset" "*.umap"
    
    # Re-add everything
    git add .
    
    # Author a new commit
    git commit -m "git lfs ftw"
    
    # Push
    git push
    

    【讨论】:

      【解决方案3】:

      我也遇到了这个错误。第二个git push 成功了

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案4】:

      以上答案都不适合我,但这是有效的。

      1. 从您的项目中删除 .git/
      2. 将远程存储库克隆到某个新位置,例如您的桌面:
        git clone https://github.com/foo/bar.git
        
      3. .git/ 从新位置移动到旧位置
      4. 重新提交并推送您的更改

      【讨论】:

      • 这对我有用,非常感谢!
      【解决方案5】:

      你可能会收到这样的错误

      错误:无法锁定配置文件 .git/config:没有这样的文件或 目录

      那是因为你没有本地的.git/config 文件你可以通过这个命令让它工作:

      git config --global http.postBuffer 524288000
      

      【讨论】:

      • 这在我尝试在 cygwin 内非常慢的 PC 上克隆时帮助了我 - 它继续远程挂断 - 直到我使用了这个命令
      • 这帮助我解决了“致命:初次联系时远程端挂断”问题。
      【解决方案6】:

      其他解决方案在我的情况下不起作用,进行垃圾收集为我修复了它:

      git gc --aggressive
      

      您可以先尝试git gc

      【讨论】:

      • 这解决了我的问题,但它也将分离的 HEAD 更改压缩到合并它们变得令人讨厌的状态(所有内容都转换为 ADD)。我希望我在运行它之前再研究一下。
      • 这解决了我的问题。我的问题是(使用 ssh):枚举对象:886,完成。 |计数对象:100% (850/850),完成。 |远程主机关闭与 bitbucket.org 的连接。 |致命:远端意外挂断|压缩对象:100% (831/831),完成。 |致命:远端意外挂断
      • Git 会在执行 push 命令之前自动执行 gc 命令
      • @linjiejun 在我的情况下,直到我先拉动我才能推动,而拉动是我收到错误“致命:内存不足,malloc 失败...”的地方
      【解决方案7】:

      执行此操作以查看您正在使用的密钥:

      ssh -vT git@github.digitalglobe.com
      

      然后确保在您的构建中一开始就运行这个:

      eval "$(ssh-agent -s)"
      ssh-add ~/.ssh/id_rsa
      

      【讨论】:

        【解决方案8】:

        以下命令可能会对您有所帮助...

        git config --global http.postBuffer 1048576000
        git config --global http.lowSpeedLimit 0
        git config --global http.lowSpeedTime 999999
        

        【讨论】:

          【解决方案9】:

          上述解决方案都不适合我,但是我推送的提交非常大。

          很简单,我把它分成两个提交,分别推送每个提交,它立即通过。

          【讨论】:

            【解决方案10】:

            在我的情况下,这个错误是由于 VPN 连接中断造成的。只需关闭并打开 VPN 即可修复错误。

            【讨论】:

              【解决方案11】:

              从 vscode 上的 bash shell 切换到 zsh 为我修复了它。

              【讨论】:

                【解决方案12】:

                与其他答案之一相反 - 我在使用 ssh 推送时遇到问题 - 我切换到 https 并已修复。

                git remote remove origin
                git remote add origin https://github.com/user/repo
                git push --set-upstream origin master
                

                【讨论】:

                • 可以使用git remote set-url origin https://github.com/user/repo。无需先删除
                • 太棒了!谢谢!
                【解决方案13】:

                我通过重新包装解决了这个问题:

                git repack --max-pack-size=100M -a -d
                

                转到存储库 > 在 GitHub Desktop 的命令提示符下打开 运行以下命令:

                set GIT_TRACE=1
                set GIT_CURL_VERBOSE=1
                git push origin <branch>
                

                【讨论】:

                  【解决方案14】:

                  对我来说,当我尝试从一个甚至不存在的分支中提取时,我遇到了同样的错误。

                  拉取时检查分支名称。

                  【讨论】:

                    【解决方案15】:

                    如果使用 GitHub,在 repo 的目录中,运行此命令将 http.postBuffer 设置为 GitHub 允许的最大值:

                    git config http.postBuffer 2147483648
                    

                    如果使用 git clone 克隆 repo,则可以使用相同的选项进行克隆:

                    git clone -c http.postBuffer=2147483648 git@github.com:myuser/myrepo.git /path/to/myrepo
                    

                    在这两种情况下,上述数字都相当于 2 GiB。但是,您可能需要最多此数量的可用内存才能使用此值。

                    确保每次推送到 GitHub 的提交都不会超过此大小的更改。事实上,为了安全起见,我会将提交推送大小保持在 1.8 GiB 以下。这可能需要将大型提交划分为较小的提交和推送

                    为什么是这个值?

                    之所以使用这个特定值,是因为至少在 2018 年,这个值是 documented (archive link) 作为 GitHub 的推送大小限制:

                    我们不允许推送超过 2GB

                    为什么不设置得更低?

                    之前的一些答案说将其设置为 524288000 (500 MiB),但这个数字似乎是任意的,没有任何价值。只要您的推送大小不大于设置值,任何较低的值都应该起作用。

                    为什么不设置得更高?

                    如果您将该值设置为高于 2 GiB,并且您尝试的推送大小也更高,则您可以预期 GitHub 记录的错误:

                    远程:致命:包超过最大允许大小

                    【讨论】:

                      【解决方案16】:

                      根据您用于推送到您的存储库的协议

                      HTTP

                      git config --global http.postBuffer 157286400
                      

                      参考资料:

                      SSH

                      在你的linux机器的~/.ssh/config文件中添加以下内容

                      Host your-gitlab-server.com
                        ServerAliveInterval 60
                        ServerAliveCountMax 5
                        IPQoS throughput
                      

                      参考资料:

                      【讨论】:

                      • 在这个答案中,http.postBuffer 实际上设置为 150 MiB。如有必要,我尝试在我的answer 中解释时,可以将容量提高到 2 GB。
                      • SSH 配置刚刚解决了我与 gitlab.com 的问题。非常感谢。
                      • 如何为 GitHub 执行此操作?我的主机是 github.com 吗?
                      【解决方案17】:

                      添加答案似乎几乎毫无意义,但是当我终于发现它是 Visual Studio Online 正在遭受零星中断时,我为此奋斗了很长时间。当 VS 不断提示输入信用并且 VSO 网站有时给出 500 时,这一点变得很明显。

                      Counting objects: 138816, done.
                      Delta compression using up to 8 threads.
                      Compressing objects: 100% (38049/38049), done.
                      error: unable to rewind rpc post data - try increasing http.postBuffer
                      error: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
                      The remote end hung up unexpectedly/138816), 33.30 MiB | 3.00 KiB/s
                      Writing objects: 100% (138816/138816), 50.21 MiB | 3.00 KiB/s, done.
                      Total 138816 (delta 100197), reused 134574 (delta 96515)
                      fatal: The remote end hung up unexpectedly
                      Everything up-to-date
                      

                      之后我将我的 HTTP 发布缓冲区设置回 2 MB,因为我实际上认为它适用于许多较小的帖子。

                      【讨论】:

                        【解决方案18】:

                        遇到同样的问题,尝试所有答案都不起作用,只需尝试另一个帐户,这对我有用。

                        【讨论】:

                          【解决方案19】:

                          即使在配置后缓冲区后问题仍未解决。

                          当我将 wifi 网络从宽带更改为移动热点时,我的问题得到了解决。这可能不是逻辑上正确的答案,但它解决了问题。

                          确保您的网速良好。

                          【讨论】:

                          • 感谢您的来信。我面临同样的问题。似乎本地(wifi)网络上的某些东西(防火墙?)可能会以某种方式中断与 git 服务器的连接。否则这里的连接非常好,所以我怀疑它可能是(MikroTik)路由器上的配置问题。
                          【解决方案20】:

                          在我的情况下,我在使用 Intellij Idea 推送时遇到了这个错误。

                          这是我追踪错误并修复它的方法。

                          • 在终端中启用调试日志记录,这绝不是一个坏主意:)
                          set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 
                          
                          • 通过终端推送,而不是通过 intellij
                          git push 
                          -> fatal: The current branch feature/my-new-feature has no upstream branch.
                          To push the current branch and set the remote as upstream
                          

                          解决办法是设置upstream,之前肯定出错了:

                          git push --set-upstream origin feature/my-new-feature
                          

                          【讨论】:

                            【解决方案21】:

                            罪魁祸首(以我为例):
                            一个高延迟的网络。

                            这本身不是一个答案,而是更多可能对其他人有所帮助的观察。我发现这个错误偶尔会在高延迟网络上弹出(例如,我必须使用卫星天线来访问互联网)。网络速度很好,但延迟可能很高。注意:这个问题只存在于某些场景,但我还没有确定是什么模式。

                            临时缓解措施:
                            我切换了网络——我搬到了一个速度较慢但延迟更低的蜂窝网络(我的手机用作热点)——问题就消失了。请注意,我只能间歇性地执行此操作,因为我的单元连接也是间歇性的。加上带宽使用增加了成本。我也很幸运,我有这个选项可供我使用。不是每个人都这样做。

                            我确信某处有一些配置设置使 git(或 ssh 或 curl 或任何超时时间)更能容忍此类网络,但我不知道它是什么。

                            对开发者的恳求:
                            这类问题一直是农村人口面临的问题。当您设计系统、工具和应用程序时,请考虑我们。谢谢。

                            【讨论】:

                            • 谢谢!寻求解决方案和请求。
                            • ssh 本身有一些调整选项(keepalives 等),但主要的调整选项通常是内核级别的,需要在两边都设置(例如,在 GitHub 上也是如此)。有点问题。对于像您这样的情况,我希望看到一个聚合器(LAGG 界面样式),它可以同时使用卫星和手机网络。不幸的是,这远非微不足道。
                            【解决方案22】:

                            这篇文章有很好的解释,它解决了我的问题。

                            git config --global http.postBuffer 157286400
                            

                            https://confluence.atlassian.com/stashkb/git-push-fails-fatal-the-remote-end-hung-up-unexpectedly-282988530.html

                            【讨论】:

                              【解决方案23】:

                              我的问题是网络设置:我有一个“杀手”wifi 卡,它显然会以 SSH 和 SSL 不喜欢的方式处理网络数据包。

                              为了解决这个问题,我不得不进入“Killer Control Center”、“Parameters”,并禁用“Advanced Stream Detect”——git 命令立即重新开始工作。

                              【讨论】:

                                【解决方案24】:

                                我的问题(致命:远程端意外挂断)已通过检查存储库权限和所有者解决。

                                git 存储库文件的所有者必须是您想要使用它推送/拉取/克隆的用户。

                                【讨论】:

                                  【解决方案25】:

                                  我认为这样做不是一个好主意,但如果你在你的机器上有备份..再推一次,然后尝试克隆 repo,然后从旧目录中删除 .git 并从新克隆的文件夹中移动 .git .. git 已解决,但由于该问题,某些文件可能无法在 git 上上传。再次从您的备份中推送所有内容,然后将其拉到您的服务器或另一台机器上,使其损坏。现在我只是这样做了...对我有用..并在执行此操作之前备份您的目录。

                                  如果我错了,请纠正我。我也不知道这样做后会出现什么问题?但这一次真的奏效了。

                                  【讨论】:

                                    【解决方案26】:

                                    如果您推送的任何提交格式不正确,也会发生这种情况。

                                    我(在不知不觉中)提交了一个格式错误的作者电子邮件字段,但我得到的只是这个模糊的 remote end hung up 错误消息。我能够推送其他分支而不是这个 one 分支,所以我开始从“坏”分支一次推送一个提交,直到我最终登陆:

                                    Pushing to git@github.com:directangular/unicorn.git
                                    Counting objects: 100% (9/9), done.
                                    Delta compression using up to 20 threads
                                    Writing objects: 100% (5/5), 549 bytes | 549.00 KiB/s, done.
                                    Total 5 (delta 4), reused 0 (delta 0)
                                    remote: error: object 74c7584ff0b93591c19d3a3c19695889dd2274d2: badEmail: invalid author/committer line - bad email        
                                    remote: fatal: fsck error in packed object        
                                    error: remote unpack failed: index-pack abnormal exit
                                    To github.com:directangular/unicorn.git
                                     ! [remote rejected]       pizzafeast -> pizzafeast (failed)
                                    error: failed to push some refs to 'git@github.com:directangular/unicorn.git'
                                    

                                    所以看起来remote end hung up unexpectedly 错误有点“吞下”实际的错误消息,这可能是我在这里遇到的某种格式错误的提交。

                                    修复格式错误的电子邮件后,我可以正常推送了。

                                    【讨论】:

                                      【解决方案27】:

                                      PLESK Nginx 和 GIT 我在 plesk git 上遇到了这个错误,并且在使用(谁知道是什么)推送一个大型 repo 时,它给了我这个 HTTP 代码 413 的错误,我研究了以下 服务器是 Plesk,它运行着 nginx 和 apache2,所以我查看了日志并在 nginx 日志中发现了错误

                                      关注this link 以允许 plesk 使用更大的文件上传重建配置。

                                      我跳过了 git 的 php 部分

                                      在那之后 git push 没有任何错误。

                                      【讨论】:

                                        【解决方案28】:

                                        我在上传大型 repo 时遇到了类似的错误,“致命:远程端意外挂断”,没有任何进一步的细节。

                                        经过大量研究,这就是我所做的:

                                        • 使用 SSH 而不是 HTTPS,没有解决问题。
                                        • 将 http.postBuffer 逐渐增加到一个非常大的值,但仍然没有 运气。
                                        • 我发现这可能是因为 repo(因为这是从 perforce 新迁移的 repo),所以我使用 LFS 重新创建了 repo,将 largeFileThreshold 设置为 40m,这大大减少了 repo 大小(从 3.5G 到 500M)。 我以为这会解决问题,但令我惊讶的是,我仍然遇到了同样的错误。

                                        最后,我想到可能是我使用的是旧版 git 客户端,因为我没有看到其他错误消息。 我将 git 客户端升级到最新版本(2.20.1),瞧,错误消失了!

                                        【讨论】:

                                        • 我也有这个确切的问题(虽然从 TFS 迁移)。我从 2.19 升级到 2.20 并修复了它,但粗略查看发行说明并没有发现问题可能是什么。
                                        • 我刚升级到 2.20.1.windows.1 还是不让我推送到远程仓库
                                        • @Vidar 可能是检查大文件,GitHub 有严格限制为 100MB help.github.com/articles/what-is-my-disk-quota;查看confluence.atlassian.com/bitbucket/… 中的“手动查看存储库中的大文件”部分;该页面本身是一个很好的阅读。
                                        • @MahmoudHanafy - 谢谢 - 这是 web.config 中关于最大文件大小的参数 - 增加它并且 git 的行为和每个人都很高兴!这对我来说不是 GitHub,而是我们自己的私人网站 Bonobo.Git.Server。
                                        【解决方案29】:

                                        此错误也可能通过在存储库上缺少写入权限而引发。


                                        我的具体案例是这样的:

                                        1. 我使用我的服务器的root 用户创建了一个存储库(通过 SSH)。
                                        2. 我安装了a git service 并创建了一个git linux 用户,该用户应该管理所有与git 相关的操作。
                                        3. 到那时,我已经忘记了 repo 最初是使用 root 用户创建的,而 git 用户根本没有文件权限将任何内容写入存储库。

                                        【讨论】:

                                          【解决方案30】:

                                          1) cd 到项目目录

                                          2) git status

                                          3)git checkout -f HEAD

                                          4) 如果您的 repo 看起来不完整,请再次拉下 master 以确保您是最新的,以确认成功

                                          如果您在从 Bitbucket 克隆存储库时从 Visual Studio 的 Git 中收到相关错误,则此方法有效

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 2012-06-08
                                            • 2011-05-04
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2021-04-03
                                            • 2018-03-11
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多