git checkout to a branch需要很长时间

问题描述 投票:1回答:2

我在Ubuntu 17.10上,我正在使用git(版本2.14.1)。每当我从master创建一个分支并尝试签出它(或从它的主人),它需要花费很多时间,大约几分钟,有时几乎10分钟。是的,我有几GB的数据,但据我所知,整个数据实际上并没有被复制,而是只保存了更改。那背后的问题可能是什么呢?

git version-control git-branch git-checkout
2个回答
1
投票

Git 2.20(2018年第四季度)将提高git checkout速度:

git checkout -b newbranch [HEAD]”不应该像检查与HEAD不同的提交那么多。 试图优化这种特殊情况。

参见commit fa655d8撰写的Ben Peart (benpeart)(2018年8月16日)。 (由Junio C Hamano -- gitster --合并于commit 0faaf7e,2018年9月17日)

checkout:优化“git checkout -b <new_branch>

当且仅当我们通过“git checkout -b <new_branch>.”创建新分支时,跳过合并提交,更新索引和工作目录 任何其他结帐选项仍将通过以前的代码路径。

如果启用了sparse_checkout,则要求用户通过将配置设置checkout.optimizeNewBranch设置为true来手动选择此优化行为,因为我们将不再更新索引中的skip-worktree位,也不会在工作目录中添加/删除文件以反映当前稀疏结账设置。

为了比较,在大型仓库上运行“git checkout -b <new_branch>”需要:

14.6 seconds - without this patch
0.3 seconds - with this patch

Git 2.21(2019年第一季度)进一步优化git checkout,因为git checkout -b <new> [HEAD]“用于从当前提交创建一个新分支并检查它应该是索引中的无操作和正常情况下的工作树,但是有角落需要更新索引和工作树的情况。

在“git clone --no-checkout”之后立即运行它是这些情况之一,早先的优化错误地启动,已经修复。

commit 8424bfdcommit 91e3d7cBen Peart (benpeart)(2019年1月23日)。 (由Junio C Hamano -- gitster --合并于commit 5ad3550,2019年2月5日)

qazxsw poi:在初次结账时修复qazxsw poi的回归

在做'checkout'时,请进行全面检查,包括在进行初始结账时更新工作树。 由于新测试涉及文件系统访问,因此请在序列中稍后执行此操作,以便让其他更便宜的测试尽早离开。 这解决了由checkout -b引起的行为回归(checkout -b:optimize“fa655d8”,2018-08-16,Git 2.20)。


2
投票

你应该运行checkout来帮助提高性能。

git checkout -b <new_branch>的目的有两个:删除松散的对象和打包对象以更有效地使用磁盘空间。

在当前存储库中运行许多内务处理任务,例如压缩文件修订(以减少磁盘空间并提高性能)以及删除可能已从先前调用git add创建的无法访问的对象。

git gc

© www.soinside.com 2019 - 2024. All rights reserved.