【问题标题】:Git RPC failed; curl 18 transfer closed with outstanding read data remainingGit RPC 失败; curl 18 传输已关闭,剩余未完成的读取数据
【发布时间】:2020-07-07 18:28:02
【问题描述】:

任何超过一定大小的仓库的 git 克隆都会在中途失败,我可以使用 ssh 方法,但是在这种情况下,http 是必需的,因为它是 brew install 的一部分的辅助操作。

$ brew cask install homebrew/cask-versions/adoptopenjdk8

==> Tapping homebrew/cask
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 422119, done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
Error: Failure while executing; `git clone https://github.com/Homebrew/homebrew-cask /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask` exited with 128.
Follow the instructions here:
  https://github.com/Homebrew/homebrew-cask#reporting-bugs
/usr/local/Homebrew/Library/Homebrew/utils.rb:266:in `safe_system'
/usr/local/Homebrew/Library/Homebrew/tap.rb:273:in `install'
/usr/local/Homebrew/Library/Homebrew/cask/cmd.rb:157:in `run'
/usr/local/Homebrew/Library/Homebrew/cask/cmd.rb:123:in `run'
/usr/local/Homebrew/Library/Homebrew/cmd/cask.rb:9:in `cask'
/usr/local/Homebrew/Library/Homebrew/brew.rb:103:in `<main>'

这是在一台全新的机器上,具有非常快的互联网连接(已验证 git clone 在其他机器上工作)。另外我增加了缓冲区大小

git config --global http.postBuffer 524288000

我在 http 和 ssh 方法中克隆小型 repos 都没有问题。 我已经查看了类似的堆栈问题,例如下面的问题,但它们没有涵盖这种情况。

错误:RPC 失败; curl 传输因未完成的读取数据而关闭 剩余

【问题讨论】:

  • 您是否有任何代理、防火墙、防病毒软件、SSL/TLS MITM 设备或其他网络拦截器?此外,http.postBuffer 对克隆没有影响,增加它只会在你推送时浪费大量内存。
  • 没有代理或防病毒,它是开箱即用的新 Mac。也没有设备,但感谢 http.postbuffer 的提醒!
  • @Murchie85 我在下面提出的两个选项中,哪一个对你有用?

标签: git homebrew-cask


【解决方案1】:

在我的情况下,它确实是一种我不知道的防病毒软件,Virgin Broadband ISP 使用内置的Virus Safe,我不知道它是在未经我同意的情况下被激活的。对于有这个isp的用户,可以通过https://my.virginmedia.com/my-apps/onlinesecurity/websafe/settings停用它

【讨论】:

  • 哇,我永远不会解决这个问题——谢谢!
  • 我不得不从我的 TalkTalk 帐户中关闭所有 Home Safe 设置
  • 尝试增加缓冲区,尝试浅化 git 克隆,这里是 Virgin(英国威尔士)正在过滤掉 git repo...
  • 我发现它在virginmedia 上是“网络安全”而不是“病毒安全”。只需将 github.com 添加到“允许的网站”白名单即可解决此问题
【解决方案2】:

如果问题仍然存在,即如果您在尝试自己时看到相同的错误消息:

git clone https://github.com/Homebrew/homebrew-cask /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask

那就试试吧:

  • SSH 克隆:

    git clone git@github.com:Homebrew/homebrew-cask /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask
    
  • shallow clone as here

    git clone --depth 1 https://github.com/Homebrew/homebrew-cask /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask
    cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask
    git fetch --unshallow
    

【讨论】:

  • 标记为正确答案,尽管在我的情况下,它确实是在我不知情的情况下安装在我的 ISP 端的防病毒软件。我意识到切换到 ssh 时发现端口被阻塞了。当连接速度不佳时,您列出的方法效果很好。
  • 我在尝试 unshallow 时收到以下信息 - sudo git fetch --unshallow remote: Enumerating objects: 482427, done. error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: the remote end hung up unexpectedly fatal: protocol error: bad pack header
  • @TobyBeresford sudo?通常,没有人以 root 身份执行 Git 命令。您使用的是什么操作系统和操作系统版本,您使用的是什么 Git 版本?
  • Mac OS X 10.15.6 Catalina - Git 2.23.0。我试图覆盖现有的部分克隆,因此 sudo,同意不是很好的做法。 :)
  • @TobyBeresford 好的,如果在将 Git 升级到 2.28 后问题仍然存在,您可能需要考虑发布一个单独的问题,以使其比隐藏在 cmets 中更明显。
【解决方案3】:

&tldr; brew update-reset

我也遇到了同样的问题。首先,我尝试了@VonC 的答案,但没有帮助。 我收到消息

➜  ~ git clone git@github.com:Homebrew/homebrew-cask /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask
fatal: destination path '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask' already exists and is not an empty directory.

谷歌搜索下一条消息给了我this link 运行命令的解决方案(在我的情况下)

brew update-reset

问题解决后

➜  ~ brew update-reset
==> Fetching /usr/local/Homebrew...
remote: Enumerating objects: 61, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 4), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), 3.55 KiB | 454.00 KiB/s, done.
From https://github.com/Homebrew/brew
 * [new branch]          imgbot     -> origin/imgbot

==> Resetting /usr/local/Homebrew...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'

==> Fetching /usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart...

==> Resetting /usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/elastic/homebrew-tap...

==> Resetting /usr/local/Homebrew/Library/Taps/elastic/homebrew-tap...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/heroku/homebrew-brew...

==> Resetting /usr/local/Homebrew/Library/Taps/heroku/homebrew-brew...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core...
fatal: unable to access 'https://github.com/Homebrew/homebrew-core/': transfer closed with outstanding read data remaining

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/sass/homebrew-sass...

==> Resetting /usr/local/Homebrew/Library/Taps/sass/homebrew-sass...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'

虽然我发现获取 homebrew-core 存在一个问题,但所有操作都已成功完成,并且我能够更新软件包

➜  ~ brew update && brew upgrade && brew cleanup
Updated 1 tap (homebrew/core).
==> New Formulae
cloudformation-guard
==> Updated Formulae
aws-okta              bitrise               cbmc                  crowdin               frpc                  monero                openrct2              ssh-audit             traefik
==> Upgrading 1 outdated package:
heroku/brew/heroku 7.43.2 -> 7.44.0
==> Upgrading heroku/brew/heroku 7.43.2 -> 7.44.0
==> Downloading https://cli-assets.heroku.com/heroku-v7.44.0/heroku-v7.44.0.tar.xz
######################################################################## 100.0%
==> Caveats
To use the Heroku CLI's autocomplete --
  Via homebrew's shell completion:
    1) Follow homebrew's install instructions https://docs.brew.sh/Shell-Completion
        NOTE: For zsh, as the instructions mention, be sure compinit is autoloaded
          and called, either explicitly or via a framework like oh-my-zsh.
    2) Then run
      $ heroku autocomplete --refresh-cache

  OR

  Use our standalone setup:
    1) Run and follow the install steps:
      $ heroku autocomplete

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
?  /usr/local/Cellar/heroku/7.44.0: 27,477 files, 59.4MB, built in 40 seconds
Removing: /usr/local/Cellar/heroku/7.43.2... (27,475 files, 59.4MB)
Removing: /Users/tpojka/Library/Caches/Homebrew/heroku--7.43.2.tar.xz... (6.9MB)
Removing: /Users/tpojka/Library/Caches/Homebrew/libyaml--0.2.5.catalina.bottle.tar.gz... (107.4KB)
Removing: /Users/tpojka/Library/Caches/Homebrew/nghttp2--1.41.0.catalina.bottle.tar.gz... (968.6KB)
Removing: /Users/tpojka/Library/Logs/Homebrew/htop... (64B)
Removing: /Users/tpojka/Library/Logs/Homebrew/guile... (64B)
Removing: /Users/tpojka/Library/Logs/Homebrew/gnupg... (64B) 

由于之前看到的错误,我又使用了brew update-reset 命令,然后一切顺利,没有错误:

➜  ~
➜  ~ brew update-reset
==> Fetching /usr/local/Homebrew...

==> Resetting /usr/local/Homebrew...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart...

==> Resetting /usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/elastic/homebrew-tap...

==> Resetting /usr/local/Homebrew/Library/Taps/elastic/homebrew-tap...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/heroku/homebrew-brew...

==> Resetting /usr/local/Homebrew/Library/Taps/heroku/homebrew-brew...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services...

==> Resetting /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

==> Fetching /usr/local/Homebrew/Library/Taps/sass/homebrew-sass...

==> Resetting /usr/local/Homebrew/Library/Taps/sass/homebrew-sass...
Branch 'master' set up to track remote branch 'master' from 'origin'.
Reset branch 'master'
Your branch is up to date with 'origin/master'.

➜  ~

我不太清楚为什么会这样,但可能与操作系统更新有关(发生在此处的那个点附近)。我收到了将操作系统升级到 10.15.7 一天的通知,即使在更新操作系统后,初始 brew 错误仍然存​​在。

【讨论】:

  • 虽然更新重置有效,但我在尝试运行 brew install wget 时仍然遇到 RPC failed; curl 18 transfer closed with outstanding read data remaining 错误(例如)。 :(
  • @TobyBeresford 你能说它在我的回答中描述的日志中描述的某些特定行上失败了吗?比较你的日志和我的日志有什么相似之处吗?
  • 感谢您的询问,但我现在发现了问题 - 是 ISP 停止从 github 进行大量下载 - 将 github.com 添加到我的允许网站列表解决了它。 :)
【解决方案4】:

这是 Virgin ISP 设置。我将https://github.com 添加为允许的网站:https://my.virginmedia.com/my-apps/onlinesecurity/websafe/settings

请注意,我从之前的尝试 (sudo rm -rf /usr/local/HomeBrew) 中删除了 /usr/local/HomeBrew 目录,然后按照标准安装说明运行了 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

万岁...!

==&gt; Installation successful!

【讨论】:

  • 我最初投了赞成票,但 Virgin websafe 已经有了答案。改为支持 Murchie85 的答案。
【解决方案5】:

我手动下载install.sh文件,修改BREW_REPOBREW_REPO="git@github.com:Homebrew/brew",然后运行sh install.sh

【讨论】:

    【解决方案6】:

    这些答案实际上并不能解决问题,其中一些可能但您的问题会再次出现。

    禁用tcp-udp 卸载

    达尔文/MacOS

    sudo sysctl -w net.link.generic.system.hwcksum_tx=0
    sudo sysctl -w net.link.generic.system.hwcksum_rx=0
    

    GNU/Linux;

    sudo ethtool -K eth0 tx off rx off`
    

    您的计算机正在尝试“实时”调整您的网卡以适应负载,但失败了。

    您可能遇到的其他相关问题:

    NPM Timeout on install while overseas

    Yarn - There appears to be trouble with your network connection. Retrying

    注意:我使用“实时”作为时间的相对流逝,而不是作为 CPU 周期/操作系统性能调制的衡量标准

    【讨论】:

    • 这个老问题的有趣补充。赞成。可能比我的回答更重要。
    【解决方案7】:

    打开你的 git 文件夹并删除 FETCH_HEAD 文件,然后再次推送 跳

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2019-09-13
      • 2021-04-09
      • 2016-12-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      相关资源
      最近更新 更多