【发布时间】:2019-11-29 18:22:25
【问题描述】:
在 SO 和其他地方以各种形式提出了这个问题,但我找不到让我满意的答案,因为没有人列出有问题/无问题的操作/命令,也没有人给出技术原因的完整解释速度命中。
例如:
- Why can't Git handle large files and large repos
- Why git operations becomes slow when repo gets bigger
- Git is really slow for 100,000 objects. Any fixes?
所以,我不得不再问一遍:
- 在基本 git 操作(提交、推送、拉取、添加、获取、分支、合并、签出)中,当存储库变大时,哪些操作会变慢(注意:此问题的存储库,而不是文件)
还有,
- 为什么每个操作都取决于(或不)repo 大小?
我现在不关心如何解决这个问题。 我只关心哪些动作的性能受到影响,以及根据当前 git 架构的推理。
编辑澄清:
很明显,例如git clone,将是 o(n) 的 repo 大小。
但我不清楚git pull 是否相同,因为理论上可以只查看差异。
Git 在幕后做了一些不平凡的事情,我不确定何时何地。
编辑2:
我找到this的文章,说明
如果您的存储库中有大型、不可比较的文件(例如二进制文件),您可以 每次提交时都会在您的仓库中保留该文件的完整副本 对文件的更改。如果这些文件的多个版本存在于您的 repo,他们将大大增加结帐、分支的时间, 获取并克隆您的代码。
我不明白为什么分支应该花费超过 O(1) 的时间,而且我也不确定列表是否已满。 (例如,拉动呢?)
【问题讨论】:
-
就像获取数据点的轶事证据一样:我每天都在一个拥有 87000 个文件且大小为 8 GB 的大型 monorepo 中工作。我使用的是高端笔记本电脑,没有一个 git 命令看起来很慢或有明显的延迟。让我重复一遍:我记不起它们(当然,
git clone除外,但这是给定的)。当通过 2500 英里外的 VPN 服务器远程工作时,即使git pull在 40 Mbps 的网络连接上也相当快(需要大约 20 秒来提取 20,000 个文件)。话虽如此,但要注意确保我们不会提交大型二进制文件。
标签: git