当git repos变大时,什么操作会变慢,为什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

在SO和其他地方以各种形式提出了这个问题,但我找不到的答案让我感到满意,因为没有人列出有问题的/没有问题的行动/命令,也没有人给出速度命中的技术原因。 。

例如:

所以,我不得不再问:

  1. 在基本的git动作(提交,推送,拉取,添加,获取,分支,合并,结账)中,当repos变大时,哪些动作会变慢(注意:repos,不是此问题的文件)

和,

  1. 为什么每个动作都取决于回购的大小(或没有)?

我现在不在乎如何解决这个问题。我只关心哪些动作的性能受到影响,以及根据当前git架构的推理。

编辑以澄清:

很明显,git clone例如,回购的大小是o(n)。

然而,我不清楚它是否git pull会相同,因为理论上只能看待差异。

Git在幕后做了一些非常重要的事情,我不确定何时何地。

提问于
用户回答回答于

然而,我不清楚git pull是否相同,因为理论上只能看差异。

从Git 2.23(Q3 2019)开始,它不是O(n),O(n log(N)):参见“ Git用普通名称取一个分支,用大写字母取一次 ”。

主要问题是日志图遍历,检查我们拥有和未拥有的内容(或计算强制更新状态)。 这就是为什么对于大型存储库,最近的Git版本引入了可达性位图提交图松散缓存Commit Graphs Chains。和包文件树发现推送的命令。

用户回答回答于

我看到你打开讨论的两个主要问题。首先,你要问的是当repos变大时,哪些Git操作会变慢。答案是,随着repo变大,大多数Git操作会变慢。但是,使Git看起来明显变慢的操作是涉及与远程存储库交互的操作。对你来说应该是直观的,如果回购膨胀,那么克隆,拉动和推动等事情需要更长的时间。

您所涉及的另一个问题是,是否应该首先提交大型二进制文件。进行提交时,会压缩提交中每个文件的副本并将其添加到树中。二进制文件倾向于不能很好地压缩。因此,随着时间的推移添加大型二进制文件会导致您的仓库膨胀。事实上,许多团队将配置他们的远程(例如GitHub)来阻止包含大型二进制文件的任何此类提交。

扫码关注云+社区

领取腾讯云代金券