文件为什么被全局规则忽略?

项目 .gitignore 中没有匹配规则,文件仍可能被忽略。先定位实际来源,再调整配置。

1. 找到匹配规则的来源

在仓库根目录运行以下命令,将 path/to/file 替换为实际的未跟踪文件路径:

git check-ignore -v -- path/to/file

详细输出包含来源文件、行号和匹配规则。来源可能是项目 .gitignore、.git/info/exclude 或全局忽略文件。匹配 ! 规则表示重新纳入;没有输出也可能是因为文件已被跟踪,需要另行检查。

2. 检查全局忽略文件配置

查看生效的 core.excludesFile 配置及定义它的配置文件:

git config --show-origin --get core.excludesFile

没有输出且退出状态为 1,表示没有配置该项,不代表全局忽略已关闭。Git 还会读取默认忽略文件:$XDG_CONFIG_HOME/git/ignore;XDG_CONFIG_HOME 未设置或为空时,使用 $HOME/.config/git/ignore。优先依据 check-ignore 报告的规则来源排查。

3. 调整合适的规则并验证

根据输出确定应编辑哪里:团队共享的项目规则放在 .gitignore,本仓库个人使用的规则放在 .git/info/exclude,跨仓库个人规则放在全局忽略文件。修改全局规则会影响其他仓库,不要为了一个路径直接移除整项配置。 项目 .gitignore 的优先级高于 .git/info/exclude 和 core.excludesFile。只要父目录没有仍被排除,项目中的例外规则可以覆盖较低优先级的排除规则。调整后,用实际路径再次检查:

git check-ignore -v -- path/to/file

为什么用 ! 仍无法保留被忽略目录里的文件?

准确行为与更多细节请参阅官方说明: Git 官方文档 · git check-ignore 官方文档 · Git 配置官方文档