我正在使用git子模块,git submodule update --init --recursive
命令很慢(8秒),但似乎没有更新要更新。
我想调试为什么它很慢但看起来没有--verbose
开关。有没有想过调试它正在做什么?
我正在运行Ubuntu 14.04和Git 1.9。
答案 0 :(得分:3)
由于实际结帐和复制没有变化,因此留下了两个主要根本原因:
git submodule update
已经过优化:查看问题是否仍然存在with the latest git 2.6.4 答案 1 :(得分:1)
在Git 2.20 Q4 2018上),git submodule
将会明显地更快,因为“ git submodule update
”将被逐段重写为C。
请参见commit ee69b2a,commit 74d4731(2018年8月13日)和commit c94d9dc,commit f1d1571,commit 90efe59,commit 9eca701,{{3} }(2018年8月3日)由commit ff03d93。
(由Stefan Beller (stefanbeller
)在Junio C Hamano -- gitster
--中合并,2018年9月17日)
Git 2.21实际上修复了回归问题,因为除非提出要求,否则“ git submodule update
”应该使用单个作业,但错误地使用了多个作业,该作业已得到修复。
请参见commit 4d6d6ef的commit 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
设置,当子模块丢失其工作树时,该设置不应指向目录
(例如,被取消初始化),但代码未正确维护此不变式。
请参见90efe59的commit 8eda5ef,commit 820a647,commit 898c2e6,commit 98bf667(2018年12月14日)。
(由Stefan Beller (stefanbeller
)在Junio C Hamano -- gitster
--中合并,2019年1月18日)
submodule deinit
:未设置core.worktree
当子模块被取消初始化时,工作树消失了,因此
core.worktree
的设置是虚假的。
取消设置。
当我们讨论了子模块在较早的步骤中丢失其工作树的唯一其他情况(即,将顶级项目的分支切换到不具有子模块的提交)时,这使得代码始终保持{{1 }}在子模块没有工作树时正确地取消设置。此版本重新引入了commit 3942920(
core.worktree
:submodule deinit
,2018-06-18,Git v2.19.0-rc0),该版本已作为984cd77的一部分进行了还原(还原“合并分支'sb / submodule-core-worktree'”,2018-09-07,Git v2.19.0)整个系列已恢复为违规f178c13(
unset 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
来防止扩展损坏,则会提早终止。
请参见984cd77的commit 5d124f4(2019年1月18日)。
(由Stefan Beller (stefanbeller
)在Junio C Hamano -- gitster
--中合并,2019年2月7日)
core.worktree
:如果无法正确设置git-submodule
,则中止commit e524e44(
core.worktree
:将submodule--helper
替换为connect-gitdir-workingtree
,2018-08-13,Git 2.20)如果帮助者无法确保正确设置ensure-core-worktree
,则会忘记退出子模块操作。