Git Status命令近期运行缓慢,已执行追踪求解决方案
解决git status因子模块变慢的问题
从你提供的GIT_TRACE日志能明显看到,拖慢git status的元凶是git submodule summary命令——它负责检查子模块的状态变化,当项目里有子模块(尤其是子模块数量多、体积大的时候),这个步骤会消耗不少时间。下面是几个实用的解决办法:
临时快速解决:单次忽略子模块检查
如果你只是偶尔需要快速查看主项目的状态,可以直接在执行git status时加上参数跳过子模块:
git status --ignore-submodules=all
这个命令会让git完全跳过所有子模块的状态检测,速度会立刻提升。
永久配置:默认不检查子模块状态
如果平时不需要关注子模块的变更,可以把这个设置改成默认行为:
- 仅当前项目生效:
git config status.submodulesummary 0 - 全局所有项目生效:
git config --global status.submodulesummary 0
配置完成后,以后再执行git status就不会自动触发子模块的状态检查了。
保留子模块检查的优化方案
如果你还是需要关注子模块的状态信息,可以试试优化子模块本身:
- 确保子模块的本地仓库是干净状态(没有未提交的修改、未跟踪文件),git在检查干净的子模块时会快很多
- 对子模块执行
git gc命令,清理仓库里的冗余对象和历史数据,减少git需要处理的数据量
补充说明
git status默认会调用submodule summary来展示子模块的提交差异,这个过程需要遍历子模块的提交历史、对比缓存与当前HEAD的状态,当子模块的提交历史复杂或者文件数量大时,就容易出现明显的延迟。
内容的提问来源于stack exchange,提问作者Evans Y.
相关产品推荐
相关产品推荐

