git子模块更新很慢。我该怎么调试它为什么慢?

时间:2015-12-25 07:13:15

标签: git

我正在使用git子模块,git submodule update --init --recursive命令很慢(8秒),但似乎没有更新要更新。

我想调试为什么它很慢但看起来没有--verbose开关。有没有想过调试它正在做什么?

我正在运行Ubuntu 14.04和Git 1.9。

2 个答案:

答案 0 :(得分:3)

由于实际结帐和复制没有变化,因此留下了两个主要根本原因:

答案 1 :(得分:1)

在Git 2.20 Q4 2018上),git submodule将会明显地更快,因为“ git submodule update”将被逐段重写为C。

请参见commit ee69b2acommit 74d4731(2018年8月13日)和commit c94d9dccommit f1d1571commit 90efe59commit 9eca701,{{3} }(2018年8月3日)由commit ff03d93
(由Stefan Beller (stefanbeller)Junio C Hamano -- gitster --中合并,2018年9月17日)


Git 2.21实际上修复了回归问题,因为除非提出要求,否则“ git submodule update”应该使用单个作业,但错误地使用了多个作业,该作业已得​​到修复。

请参见commit 4d6d6efcommit e3a9d1a(2018年12月13日)。
(由Junio C Hamano (gitster)Junio C Hamano -- gitster --中合并,2019年1月18日)

  

submodule update:除非另有设置,否则最多只能运行一个提取作业

     

commit 4744d03(获取子模块:方面submodule.fetchJobs配置选项,2016-02-29,Git v2.9.0-rc0)中,我们确保最多保留一个子模块的默认行为立即不设置新引入的submodule.fetchJobs配置时。

     

此变量在a028a19中回归(内置/子模块-帮助器:分解子模块更新,2018-08-03,Git v2.20.0-rc0)。修复它。


Git 2.21修复了子模块存储库中的core.worktree设置,当子模块丢失其工作树时,该设置不应指向目录 (例如,被取消初始化),但代码未正确维护此不变式。

请参见90efe59commit 8eda5efcommit 820a647commit 898c2e6commit 98bf667(2018年12月14日)。
(由Stefan Beller (stefanbeller)Junio C Hamano -- gitster --中合并,2019年1月18日)

  

submodule deinit:未设置core.worktree

     

当子模块被取消初始化时,工作树消失了,因此core.worktree的设置是虚假的。
  取消设置。
  当我们讨论了子模块在较早的步骤中丢失其工作树的唯一其他情况(即,将顶级项目的分支切换到不具有子模块的提交)时,这使得代码始终保持{{1 }}在子模块没有工作树时正确地取消设置。

     

此版本重新引入了commit 3942920core.worktreesubmodule deinit,2018-06-18,Git v2.19.0-rc0),该版本已作为984cd77的一部分进行了还原(还原“合并分支'sb / submodule-core-worktree'”,2018-09-07,Git v2.19.0)

     

整个系列已恢复为违规f178c13unset core.worktree:确保在更新后设置submodule,2018-06-18,Git v2.19.0-rc0)通过其他提交,例如commit e983175

     

保留恢复有问题的提交,但其功能通过4d6d6ef(合并分支'sb / submodule-update-in-c',2018-09-17)恢复,因此我们现在可以重新引入984cd77


Git 2.21还包括“ core.worktree”学习,如果未正确设置子模块的git submodule update来防止扩展损坏,则会提早终止。

请参见984cd77commit 5d124f4(2019年1月18日)。
(由Stefan Beller (stefanbeller)Junio C Hamano -- gitster --中合并,2019年2月7日)

  

core.worktree:如果无法正确设置git-submodule,则中止

     

commit e524e44core.worktree:将submodule--helper替换为   connect-gitdir-workingtree,2018-08-13,Git 2.20)如果帮助者无法确保正确设置ensure-core-worktree,则会忘记退出子模块操作。