首页 > 解决方案 > 为什么 git 在“解决增量”时需要网络连接?

问题描述

执行 git clone 时,git 会经历这些阶段

我希望所有的网络活动都在 期间Receiving objects,然后Resolving deltas完全是本地的(正如这里解释的,当它说它是“解析增量”时,git 实际上在做什么?)但实际上仍然有一个连接打开。

我可以通过两种方式来说明这一点:

  1. Wireshark 显示在此期间没有任何活动,在Resolving deltas关闭连接之后交换了一些数据包。
  2. 有时我看到一个连接在很长的 Resolving deltas步骤中被远程主机关闭。

所以我有兴趣知道为什么 git 需要这个连接来保持打开状态Resolving deltas?出于某种原因(例如钩子)之后是否需要它?

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

标签: git

解决方案


鉴于这个方向在这个阶段没有任何事情要做,不清楚为什么 Git 保持传输协议打开直到解析完成。在另一个方向——如果你正在推送——你的 Git 必须在接收方解析交付的瘦包期间保持连接打开,因为服务器端参考更新尚未发生,而你自己的 Git 需要知道它们是否是成功的。因此,对于推送,您的 Git 必须保持连接打开,等待解决方案完成,并等待查看他们的 Git 报告参考更新阶段的内容。

然而,对于克隆,他们的 Git 并不关心您的 Git 是否能够更新您的引用。应该可以提前关闭传输。可能有一些不幸的代码结构使得现在这太困难了,导致 Git 保持连接打开。


推荐阅读