首页/开发/Git 与协作速查/untracked cache 减少目录扫描
进阶与大仓实践69 条

untracked cache 减少目录扫描

把「哪些目录确认没有未跟踪文件」记入索引,让 git status 少扫目录;在文件数多的仓库上对状态命令有直接收益。

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

untracked cache 是什么

untracked cache 把「哪些目录已确认没有未跟踪文件」的结论记入索引,让 git status 不再每次全量扫描目录;在目录层级深、文件数多的仓库上,状态命令的耗时有直接收益。它依赖文件系统能力:不支持扩展属性的环境里缓存会失效,提速有限。开启方式有两种:update-index 单次刷新,或 core.untrackedCache 配置长期启用。

基本信息

持久启用git config core.untrackedCache true
单次启用git update-index --untracked-cache
能力测试git update-index --test-untracked-cache 测试文件系统支持
关闭core.untrackedCache false,下个 status 生效
适用目录深、文件数多的仓库
生效点git status 与 git add 的未跟踪扫描

典型使用场景

  • 大仓库提速:文件多的 monorepo 上 status 的等待明显缩短
  • 开发日常:频繁查看状态与暂存的仓库减少目录扫描
  • 容器与网络盘:先测量实际收益,再决定是否保留
  • 排错对照:status 结果与磁盘不符时关闭缓存复核
  • 配置固化:团队开发机模板按操作系统决定是否开启
  • 验证支持:先 test 再开启,避免在不支持的 FS 上白忙

常用示例

常用示例
git update-index --test-untracked-cache   # 先测试文件系统是否支持
git config core.untrackedCache true       # 持久启用
git update-index --untracked-cache        # 或仅在本次索引上启用
time git status                           # 对比启用前后的耗时
git config core.untrackedCache false      # 需要时关闭,下个 status 生效

环境与收益

环境收益备注
本地常规盘明显目录越深、文件越多收益越大
网络盘不稳定缓存可能频繁重建
容器挂载目录不稳定挂载参数影响扩展属性支持
不支持的 FS有限测试不过时缓存直接失效
无兼容性问题时可长期开启;status 出现异常缓存行为时临时关闭再确认。
开启后第一次 status 仍要建立缓存,收益从后续执行开始体现。
它与 fsmonitor 是两套互补机制(未跟踪目录缓存 + 已跟踪文件监视),可以在同一仓库同时开启。

易错点

  • 文件系统不支持扩展属性:缓存失效提速有限,先测量再决定是否保留
  • 网络盘与容器挂载:缓存可能频繁重建,收益不稳定
  • 以为一次开启永久有效:换环境后能力探测结果不同,重新验证
  • 异常缓存未排查:status 显示与磁盘不符时先关缓存复核,再考虑索引重建
  • 在 CI 上期待收益:一次性任务收益有限,优化目标应放在本地开发环境

数据来源与参考

  • Git 官方文档:git-config(core.untrackedCache)
  • Git 官方文档:git-update-index(--untracked-cache)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌