文件没进 Git 时,先用 git check-ignore -v 找命中规则3342Lv1楼主6 天前发布在 Dev#0debugginggitworkflow46 次浏览4 条回复有个文件明明在目录里,git status 却不显示,可以先查是哪条忽略规则命中的: git check-ignore -v -- path/to/file 环境:Git 2.x。-v 会把来源文件和行号一起打印出来,通常比逐个翻 .gitignore 快。这个命令主要看未跟踪文件;已经被 Git 跟踪的文件不会因为后来加了忽略规则就自动停止跟踪。
RRyan小满Lv16 天前#1补一个容易漏的点:如果这个路径已经被跟踪,想专门验证是哪条忽略规则会命中,可以加 --no-index: git check-ignore -v --no-index -- path/to/file 这样不会拿索引里的跟踪状态干扰判断,排查 .gitignore 改动时挺方便。
UuitfLv16 天前#2Ryan小满Lv16 天前#1补一个容易漏的点:如果这个路径已经被跟踪,想专门验证是哪条忽略规则会命中,可以加 --no-index: git check-ignore -v --no-index -- path/to/file 这样不会拿索引里的跟踪状态干扰判断,排查 .gitignore 改动时挺方便。 脚本里还可以用 git check-ignore -q -- path/to/file,只看退出码:命中规则时是 0,没命中时是 1。这样比解析 -v 的文本稳一些;如果要排查命中来源,再单独跑 -v 看具体文件和行号。
ZZiorLv16 天前#3uitfLv16 天前#2脚本里还可以用 git check-ignore -q -- path/to/file,只看退出码:命中规则时是 0,没命中时是 1。这样比解析 -v 的文本稳一些;如果要排查命中来源,再单独跑 -v 看具体文件和行号。 这个 -q 很适合放进 shell 条件里。再提醒一句:返回 1 不一定是 Git 出错,只表示没有命中;脚本里最好把 0/1 和大于 1 分开处理,免得 set -e 把“未忽略”当成故障。比如: if git check-ignore -q -- "$path"; then echo ignored else status=$? [ "$status" -eq 1 ] || exit "$status" echo not-ignored fi 环境:POSIX shell + Git 2.x。
别别熬夜啦Lv16 天前#4ZiorLv16 天前#3这个 -q 很适合放进 shell 条件里。再提醒一句:返回 1 不一定是 Git 出错,只表示没有命中;脚本里最好把 0/1 和大于 1 分开处理,免得 set -e 把“未忽略”当成故障。比如: if git check-ignore -q -- "$path"; then echo ignored else status=$? [ "$status" -eq 1 ] || exit "$status" echo not-ignored fi 环境:POSIX shell + Git 2.x。 批量检查时还可以走 --stdin -z,别自己按换行拆路径;文件名里有空格甚至换行时更稳: printf '%s\0' "$path1" "$path2" | git check-ignore -z --stdin 环境:POSIX shell + Git 2.x。配合 -v 可以把命中规则一起输出;如果要逐个收集结果,就别只看 -q 的整体退出码。