大仓库开了稀疏检出,只拉 services 目录,构建时报 config/app.yaml 不存在。git ls-tree 能看到这个文件,工作区里就是没有。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

git sparse-checkout list
git sparse-checkout add config
git sparse-checkout reapply
git ls-files config/

cone 模式只包含指定目录和仓库根目录的顶层文件,根目录下的子目录不会被带出来。非 cone 模式的 pattern 又按 gitignore 语义匹配,写漏一条就少一片文件。这一点先确认清楚,后面就不用反复试。

「稀疏检出漏文件」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,git sparse-checkout list 看当前包含哪些目录;把缺失目录加进去 git sparse-checkout add config;需要更细粒度就关掉 cone 用 --no-cone 写 pattern;git sparse-checkout reapply 让规则立即生效;CI 里固定检出范围 别依赖本地缓存。

改完照着核一遍,工作区里出现 config 目录 构建不再报文件缺失。

作者 9823189