git克隆或通过慢速网络拉取一个巨大的repo以致命的EOF告终



我有一个超过2GB的远程回购(1个主分支(。我有一个ADSL宽带连接,大约2-4 MbPS链接。我试着克隆回购。然而,我得到了以下错误:致命:远端意外挂断致命:早期EOF致命:索引包失败

我在Stack Overflow和其他地方进行了搜索,并试图克隆一个裸回购。后来我尝试了增量获取(我需要所有的修订(。它再次失败,并出现与克隆类似的错误。

我试着在办公室里从光纤宽带链路进行克隆,结果似乎效果很好。我怀疑git有超时问题。你能帮我解决这个问题吗?

更新:repo只支持https,不支持ssh。

谢谢,Srinivasa Pradeep

您可以使用git bundle将存储库"捆绑"到一个文件中,并通过http服务器将其恢复中断的下载。

根据进行克隆的工作站上处理器内核的数量,with Git 2.29(2020年第4季度(可能会改善这种情况。

很久以前,当并行运行index-pack任务时,默认情况下只使用3个线程:这已经向上调整了一点。

请参阅Jeff King(peff(的提交fbff95b、提交218389b、提交4727425(2020年8月21日(
(由Junio C Hamano合并——gitster——于2020年8月31日提交53015c9(

index-pack:调整默认螺纹帽

签字人:Jeff King

Commit b8a2486f15("index-pack:支持多线程增量解析",2012-05-06,Git v1.7.1-rc0-merge(描述了一个实验,该实验表明将索引包的线程数设置为高于3并没有帮助。

我使用更现代的Git版本和更现代的CPU重复了这个实验,得到了不同的结果。

以下是在我的笔记本电脑上运行的针对linux.git的p5302的时间安排,这是一款具有8个内核和超线程的酷睿i9-9880H(因此在线cpu返回16(:

5302.3: index-pack 0 threads                   256.28(253.41+2.79)
5302.4: index-pack 1 threads                   257.03(254.03+2.91)
5302.5: index-pack 2 threads                   149.39(268.34+3.06)
5302.6: index-pack 4 threads                   94.96(294.10+3.23)
5302.7: index-pack 8 threads                   68.12(339.26+3.89)
5302.8: index-pack 16 threads                  70.90(655.03+7.21)
5302.9: index-pack default number of threads   116.91(290.05+3.21)  

你可以看到,随着内核数量的增加,墙上的时钟时间继续显著提高,但超出这个范围(进入超线程领域(并没有帮助(事实上有点痛苦(。

以下是在一台具有双Xeon 6230的机器上进行的相同实验,共有40个内核(80个具有超线程(:

5302.3: index-pack 0 threads                    310.04(302.73+6.90)
5302.4: index-pack 1 threads                    310.55(302.68+7.40)
5302.5: index-pack 2 threads                    178.17(304.89+8.20)
5302.6: index-pack 5 threads                    99.53(315.54+9.56)
5302.7: index-pack 10 threads                   72.80(327.37+12.79)
5302.8: index-pack 20 threads                   60.68(357.74+21.66)
5302.9: index-pack 40 threads                   58.07(454.44+67.96)
5302.10: index-pack 80 threads                  59.81(720.45+334.52)
5302.11: index-pack default number of threads   134.18(309.32+7.98)  

结果相似;事情在40个线程时停止改善。

奇怪的是,从20到40也没有多大帮助(而且大大增加了CPU时间(
因此,这可能代表了并行性的一个实际障碍,因为上下文切换和缓存位置的丢失,我们失去了优势,但由于粗粒度锁的争用,我们没有获得墙上时钟的好处。

那么什么是好的默认值呢?

很明显,目前3的上限太低了;我们的默认值分别比每台机器上的最佳时间慢42%和57%
40核机器上的结果表明,无论核的数量如何,20个线程都是一个实际的障碍,因此我们将其作为最大值
我们在这些机器上以在线cpu值的一半获得最佳结果。这大概是超线程的结果。这在多核英特尔处理器上很常见,但在其他地方不一定
但如果我们将其视为一种假设,我们可以在超线程机器上实现最佳性能,并且仍然比其他机器上的现状要好得多,只要我们永远不会低于当前值3的一半。

这就是这个补丁的作用。

相关内容

最新更新