Gemini CLI 的 GitIgnoreParser 误判嵌套 .gitignore 的再包含规则

auraseb · ghdev · 2026-10-19

google-gemini/gemini-cli 仓库 issue #29826:当根目录 .gitignore 写有 logs/、而 logs/.gitignore 里有 !keep.txt 时,Gemini CLI 会把 git 实际追踪的 logs/keep.txt 当作被忽略,导致它在 @ 补全、glob、grep、readmanyfiles 和目录结构中全部不可见。

按 git 语义,logs/ 只匹配目录内内容而非 logs 本身,git 仍会读取 logs/.gitignore 并让 !keep.txt 再包含生效(作者用 git check-ignore -v 验证)。问题根因是 #29582(子树剪枝)引入的回归:expandWildcardDirectoryPatterns 会把 logs/ 额外展开成 /logs/,使目录本身被视为忽略,GitIgnoreParser.computeRelDirState 因此不再加载 logs/.gitignore;展开逻辑只考虑了同一文件中的否定规则,未考虑目录自身 .gitignore 中的否定规则。作者已定位根因、写好修复与回归测试,等待分配后提交 PR。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →