我在Ubuntu 17.10上,我正在使用git(版本2.14.1)。每当我从master创建一个分支并尝试签出它(或从它的主人),它需要花费很多时间,大约几分钟,有时几乎10分钟。是的,我有几GB的数据,但据我所知,整个数据实际上并没有被复制,而只保存了更改。那背后的问题可能是什么呢?
答案 0 :(得分:2)
您应该运行git gc
来帮助提升效果。
addon.xml
的目的有两个:删除松散的对象并打包对象以更有效地使用磁盘空间。
在当前存储库中运行许多内务处理任务,例如压缩文件修订版(以减少磁盘空间并提高性能)以及删除可能从先前调用git add创建的无法访问的对象。
答案 1 :(得分: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 8424bfd的commit 91e3d7c,Ben Peart (benpeart
)(2019年1月23日)。
(由Junio C Hamano -- gitster
--在commit 5ad3550中合并,2019年2月5日)
checkout
:修复了checkout -b
初始结帐时的回归现象进行“
checkout -b
”时,请进行完整的结帐,包括更新工作流程 初始结帐时的树。
由于新测试涉及文件系统访问,因此请按顺序进行后续操作,以使其他便宜的测试有机会提早离开。
这修复了由fa655d8引起的行为回归(checkout
:优化“git checkout -b <new_branch>
”,2018-08-16,Git 2.20)。