代码仓库同步卡住了

11

我试图获取Android 1.6版本的源代码,但是同步操作一直卡住。

这里是我在终端上得到的最后一部分信息:

Fetching projects:  19% (32/164)
Initializing project platform/external/freetype ...
remote: Counting objects: 970, done.
remote: Compressing objects: 100% (414/414), done.
Receiving objects:  57% (558/970), 1.28 MiB | 26 KiB/s

它就这样挂着...没有错误信息或任何类似的东西。

有人遇到过类似的问题吗?


1
我在我的Ubuntu 12 LTS x86机器上遇到了这个问题。当git生成并最大化CPU时,它似乎会一直失败于单个对象。我尝试禁用TCP窗口缩放并限制为一个线程,但都没有成功。 - Paul Lammertsma
3个回答

12

我想知道你是否在使用VMWare运行Linux。我也遇到了和你一样的问题,直到找出了问题所在:我们这边设置的tcp窗口大小为0(完全)。我在Windows 7 64位主机上运行Ubuntu 10.04的VMWare中。要解决这个问题,只需给Ubuntu在VMWare上提供足够的RAM来排除任何内存问题。我的设置为512MB,将其增加到1.5M以获得更好的性能。然后最重要的设置(实际上是解决问题的关键):确保将VMWare上的网络适配器设置为桥接模式。例如,如果使用NAT,NAT服务将会卡住,并且可能会影响窗口大小。

原因: 客户端的TCP窗口大小告诉服务器它愿意从服务器每次接收的字节数;这是客户端的接收窗口。当窗口设置为0时,这意味着客户端将无法接收任何更多的数据,直到处理其内部缓冲区中仍未处理的数据为止。这是正常的TCP内容。将窗口设置为0的大小效果是,TCP连接仍将保持活动状态一段时间,直到服务器决定等待足够长的时间并终止连接。这就是导致我的repo同步挂起而没有错误的原因。


1
谢谢,这对我有用。桥接连接解决了问题。 - inazaruk
我正在使用VirtualBox,但是在切换到桥接连接后,我仍然遇到了相同的问题。 - setzamora
为了进一步证实这个答案的有效性,现在已经由Android官方文档记录:http://source.android.com/source/known-issues.html - gsgx

7
希望这篇文章能够帮助到一些在论坛中遇到类似问题的人。
我曾经遇到过git克隆大型仓库卡住的问题。刚开始速度很快,然后急剧下降最终卡住了。这是一个TCP窗口缩放的问题。一旦禁用了它,就可以正常工作了。
(但奇怪的是,当我在VMWare的Linux上运行时,没有出现问题。)
要在当前会话中禁用此功能 $ sudo sysctl -w net.ipv4.tcp_window_scaling=0

4
为了让这个答案更加有效,现在可以通过android文档进行查证:source.android.com/source/known-issues.html。 - gsgx
这对我有帮助,谢谢。不知何故,当我查看已知问题页面时,我没有发现这个问题。很奇怪,这个仓库没有从失败的同步中恢复的能力。 - BHS

0

在 Stack Overflow 上,去年九月也出现了一个类似的问题。

这可能与网络速度有关,或者与您使用的 Git 版本有关。
如果是 msysgit,请更新到最新版本。
另请参阅 msysgit问题361


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