首页/开发/Git 与协作速查/稀疏索引(sparse index)
进阶与大仓实践69 条

稀疏索引(sparse index)

启用后索引只展开稀疏目录的树条目,git status 等命令在超大仓库更快;配合 cone 模式使用,Git 2.34 起趋于稳定。

Git 与协作速查开发更新于 2026-10-13

稀疏索引是什么

稀疏索引(sparse index)是对稀疏检出的进一步优化:普通索引为工作区里每个文件建条目,稀疏索引把被排除的目录折叠成条目,git status 等命令不必逐文件确认。它配合 cone 模式使用,Git 2.34 起趋于稳定;索引体积与状态命令速度都能得到改善。

基本信息

启用git sparse-checkout init --cone --sparse-index
配置index.sparse=true(可显式查看与设置)
查看git ls-files --sparse 展示折叠目录条目
关闭git sparse-checkout disable 退回完整工作区与普通索引
版本Git 2.34 起趋于稳定
叠加常与部分克隆、commit-graph 组合使用,建议逐项启用

典型使用场景

  • 超大仓库只关注部分目录:配合 cone 模式限定检出范围
  • status 慢的 monorepo:折叠目录减少索引条目与扫描量
  • CI 单模块构建:只检出所需目录,索引更小
  • 观察索引体积变化:对比 .git/index 大小评估效果

常用示例

常用示例
git sparse-checkout init --cone --sparse-index   # 启用 cone 模式与稀疏索引
git sparse-checkout set services/payment         # 只关注支付模块
git ls-files --sparse | head                     # 查看折叠目录条目
ls -l .git/index                                 # 对比索引体积变化
git status --porcelain | head                    # 状态命令应明显更快

与稀疏检出对照

概念范围效果
稀疏检出工作区少了目录内容不检出,索引仍逐文件
稀疏索引索引也折叠目录状态与遍历更快
cone 模式用目录清单表达规则避免复杂模式写法
稀疏索引是性能开关,不改变内容语义;遇到兼容问题(旧工具不识别)可以 disable 退回普通索引,再按需重新启用。
旧版打包脚本或老 IDE 不识别折叠索引布局时可能出现异常,先禁用稀疏索引验证问题是否相关。

易错点

  • 旧工具不识别稀疏索引布局:打包脚本、老 IDE 异常时报错难懂,先禁用验证
  • 把索引体积与状态速度混为一谈:两个指标分开测量,优化前先记基线,否则无法判断哪项生效
  • 稀疏状态下文件不见了误判:被排除目录本就不在工作区,用 git ls-files --sparse 核对
  • 全套特性齐上:sparse-index、fsmonitor、untracked-cache 逐项加,便于定位收益与问题
  • 团队文档缺位:同事不知道仓库开启了稀疏模式,缺文件被误判为仓库损坏,检出前提要写进 README
  • 切换模式前不收尾本地改动:从完整检出切到稀疏模式时工作区会按规则调整,先提交或暂存改动再切换

数据来源与参考

  • Git 官方文档:git-sparse-checkout(--sparse-index)
  • Git 2.34 Release Notes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌