使用命令git ls-files --ignored
?
来自git help ls-files
:
-i, --ignored
仅显示输出中被忽略的文件。在索引中显示文件时,仅打印与排除模式匹配的文件。在展示"其他"文件,仅显示与排除模式匹配的文件。
答案 0 :(得分:14)
首先,请确保您不要将--ignored
与--other
混淆。
--other
是您列出未跟踪文件的选项。从git-ls-files
的手册(强调我的):
-o, --others
在输出
中显示其他(即未跟踪)文件
那就是说,让我们看看--ignored
的作用。无论您列出的是什么,无论是跟踪文件,未跟踪文件,修改过的文件等,您都可以从输出中排除某些文件。将其视为在输出上自动完成的免费grep -v
。例如:
git ls-files --other --exclude=*.o
将列出与*.o
不匹配的所有未跟踪文件。排除模式与.gitignore
无关。实际上,.gitignore
确定--other
输出的内容,--exclude
在列表完成后过滤输出(或至少是观察到的行为) 1 。
现在--ignored
只是恢复输出。因此,exclude=
排除的内容将被打印,而未排除的内容将被省略。因此,例如:
git ls-files --other --exclude=*.o --ignored
会打印执行匹配*.o
的所有未跟踪文件。
1 不完全相同,--exclude
仅过滤未跟踪的文件,因此如果您列出跟踪的文件,--exclude
不会排除任何内容。但是,对于--ignored
,它会列出应该被排除的文件。这有点奇怪。
结论: --ignored
基本上会还原命令行中给出的排除模式。默认情况下,排除模式为空(您会看到所有内容),因此--ignored
没有任何排除模式会导致所有被省略。这绝不是有用的,这就是--ignored
需要排除模式才能工作的原因。
自提到--exclude-standard
以来,我想对此进行扩展。 --exclude-standard
会将忽略的模式(例如写在.gitignore
中)添加为列表中的排除模式。所以请考虑以下命令:
git ls-files --ignored --exclude-standard
首先,此命令列出所有跟踪的文件。然后给定--ignored
命令,它将只打印那些与排除模式匹配的文件。给定--exclude-standard
,将打印与.gitignore
中的模式匹配的有效文件。但那些是您未跟踪的文件。如此有效,你什么也看不见。您 会看到某些内容的唯一情况是,如果您要跟踪.gitignore
中已提及要忽略的文件。
换句话说,如果该命令输出任何内容,则表示您已告知git忽略某些文件,但您违反了自己的规则并将其添加到存储库中。
其他有趣的命令可能是:
git ls-files --other --exclude-standard
显示未在.gitignore
中指定的所有未跟踪文件。您还可以在git status
。
git ls-files --other --ignored --exclude-standard
显示您使用.gitignore
成功设法忽略的所有未跟踪文件。换句话说,(假设先前的查询为空,即没有未标记的未跟踪文件),这将显示当前目录中不属于存储库的所有文件。这对于检查不应忽略的文件非常有用,必须放在存储库中。