搞不清文件为什么被忽略,可以用 git check-ignore -v

57 次浏览3 条回复

.gitignore 规则多了以后,某个文件为什么没进 Git 往往不太直观。可以在仓库里查:

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

-v 会显示实际命中的忽略文件和行号,--no-index 还能检查已经被 Git 跟踪的文件是否符合规则。只想批量看几个路径时,把它们一起放在命令末尾即可。

环境:Git 1.7.6+。如果命令没有输出,通常表示它没有被忽略,或者路径写法和规则的匹配范围对不上。

补个容易混淆的点:默认情况下,已经被 Git 跟踪的文件通常不会被报告,--no-index 才适合拿来检查这类路径。要在脚本里只判断有没有命中,可以加 -q;但它会隐藏规则来源,排查具体是哪条规则时还是保留 -v 更方便。

Zoe_JayLv1#1

补个容易混淆的点:默认情况下,已经被 Git 跟踪的文件通常不会被报告,--no-index 才适合拿来检查这类路径。要在脚本里只判断有没有命中,可以加 -q;但它会隐藏规则来源,排查具体是哪条规则时还是保留 -v 更方便。

再补一个脚本里挺实用的用法:路径很多或文件名带空格时,可以用 --stdin,一行一个路径:

printf '%s\n' 'src/a file.txt' 'build/app.js' | git check-ignore -v --stdin

这样不用担心 shell 展开和空格拆词;想让命令在命中时只返回状态,再配合前面说的 -q 就行。

如果是想找“已经被跟踪、但现在又被忽略规则命中”的文件,check-ignore 之外还可以看:

git ls-files -ci --exclude-standard

这个对清理误提交的构建产物挺方便;确认后再决定是否 git rm --cached,别直接删本地文件。