为什么git在“解析增量”时需要网络连接?

时间:2018-11-09 10:11:56

标签: git

执行git克隆时,git经历了各个阶段

  • Receiving objects
  • Resolving deltas
  • Checking out files

我希望所有网络活动都在Receiving objects期间进行,然后Resolving deltas完全是本地活动(如此处What is git actually doing when it says it is "resolving deltas"?所述),但实际上仍然有连接处于打开状态。 / p>

我可以通过两种方式告诉我们:

  1. Wireshark在Resolving deltas期间未显示任何活动,然后在那里 关闭连接后交换了一些数据包。
  2. 有时候我看到一个连接在很长一段时间内被远程主机关闭 Resolving deltas步骤。

所以我感兴趣的是为什么git需要在Resolving deltas期间保持此连接打开?出于某种原因(例如钩子)之后是否需要?

(注意:这可能取决于您使用的是https还是ssh)

1 个答案:

答案 0 :(得分:1)

鉴于在这个阶段 this 方向没有任何事情要做,因此尚不清楚为什么Git在解决方案完成之前一直保持传输协议开放。在另一个方向上(如果您要推动),您的Git必须在接收方解决交付的瘦包的过程中保持连接打开,因为尚未发生服务器端参考更新,而您自己的Git需要知道它们是否是成功的。因此,要进行推送,您的Git必须保持连接打开,等待解析完成,然后等待查看其Git在参考更新阶段报告的内容。

但是,对于克隆,他们的Git并不关心您的Git是否能够更新您的引用。应该有可能尽早关闭运输工具。可能有一些不幸的代码构造现在使得这太困难了,导致Git保持连接断开。