git 克隆以 Broken Pipe 结束

git clone ends with Broken Pipe

我有一个非常大的 git 存储库,想从中克隆。在 一台机器上(ArchLinux git 版本 2.2.2) 一切正常...

Cloning into 'foo'
remote: Counting objects: 2372505, done
remote: Compressing objects: 100% (456914/456914), done.
Receiving objects: 100% (2372505/2372505), 3.81 GiB | 6.20 MiB/s, done.
...

... 但是 在另一台机器上(Ubuntu 与 git 版本 2.3.0,也尝试过 1.7.0.4),我只看到以下:

Cloning into 'foo'
remote: Counting objects: 2372505, done.

几个小时后,它以

结束
Write failed: Broken pipe
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

知道问题出在哪里吗?

顺便说一句:

关于 GitLab,this thread 提及(对于类似的错误)

I solved that issue (unable to checkout large repo' via HTTP) by editing git/config/unicorn.yml and setting timeout to 120, when it was previously 30, and restarting the gitab service.

如果这不仅与 Git 托管服务器有关,而且与 Git 本身有关,那么您还有其他选择可以尝试:

  • The remote end hung up unexpectedly while git cloning
  • fatal: early EOF fatal: index-pack failed

解决了!我使用了一个DNS名称来连接gitlab服务器,我不知道的是:这个名称已被解析为同一服务器的外部IP , 所以,服务器和客户端不在同一个子网中

因此,客户端连接到服务器的外部 IP,因此防火墙必须将其 NAT 返回到服务器。

解决方案 非常简单:我只是将带有内部 IP 的主机名添加到客户端计算机的 /etc/hosts 文件中,然后从中克隆工作就像一个魅力.

对我来说,在尝试了网上找到的所有建议后,发现 VPN 连接不断地连接和断开。似乎如果有太多 "network outages" 或有损网络,git 克隆 "jams" 最终你会收到 Broken pipe-error 消息。

要调试,如果有任何实际流量在进行,您可以使用

iptraf

tcpdump -ni eth0 host github.com

在我的例子中,最初有 2MB/s 的稳定流量,但几秒钟后,底层连接中断,克隆流再也没有恢复,直到我修复了 OpenVPN 连接以保持更稳定.