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 是两套互补机制(未跟踪目录缓存 + 已跟踪文件监视),可以在同一仓库同时开启。