使用单个命令查找所有git忽略的文件以及忽略这些文件的原因

使用单个命令查找所有git忽略的文件以及忽略这些文件的原因,git,Git,我可以找出哪些文件被忽略了 git status --ignored git check-ignore -v somefile 我可以找出一个文件被忽略的原因 git status --ignored git check-ignore -v somefile 如何将两者结合起来?我微弱的尝试无效。表达方式如 git check-ignore -v . 或 走得很近;它们只列出了git status中列出的文件的一小部分——被忽略的文件。(例如,.DS\u存储文件根本不显示。) 我能想到

我可以找出哪些文件被忽略了

git status --ignored
git check-ignore -v somefile
我可以找出一个文件被忽略的原因

git status --ignored
git check-ignore -v somefile
如何将两者结合起来?我微弱的尝试无效。表达方式如

git check-ignore -v .

走得很近;它们只列出了git status中列出的文件的一小部分——被忽略的文件。(例如,
.DS\u存储
文件根本不显示。)

我能想到的最好的办法是,用我那无力的unix fu:

git status --ignored | tr -d '\t' | git check-ignore --verbose --stdin
但是它在
状态输出的最后一个空行出错了,我不得不玩这些管道游戏,这看起来很疯狂。

在Bash 4+中:

启用
globstar
dotglob

shopt -s globstar
shopt -s dotglob
setopt dotglob
以及:

zsh
globstar(称为递归globbing)中,默认情况下处于启用状态,因此只需启用
dotglob

shopt -s globstar
shopt -s dotglob
setopt dotglob
以及:


git感知文件列表的瑞士军刀是
git ls文件

git ls-files --exclude-standard -oi
将列出所有未索引的忽略文件。而且,
git check ignore
有一个
--stdin
选项,所以

git ls-files --exclude-standard -oi | git check-ignore -vn --stdin

做你想做的事,尽可能快。我希望经常使用
--exclude standard
选项,这样我就有了一个全局别名,
git config--global alias.ls“ls files--exclude standard”
,所以对我来说,它应该是
git ls-oi | git check ignore-vn--stdin
(在中找到)有很多变体。例如
find-键入f-execgitcheck ignore-v'{}'\+
gitcheck ignore-v$(find.-type f)
gitcheck ignore-v$(gitls文件--其他)
您不需要引号,
find-type f-execgitcheck ignore-v{/code>@phd我特别喜欢
gitcheck ignore-v$(find.-type f-print)
尽管我不知道如何按照注释建议排除
.git
文件夹。我仍然觉得很奇怪,不仅仅是一个直接的git命令。@jthill:有些shell(特别是csh/tcsh)如果不引用括号,就会吃掉括号。@matt:
find-name.git-prune-o-typef-print
起作用。
***
(如问题中所示)的问题是它跳过了点文件(
*
)。是的,我最喜欢它,谢谢。我仍然不太明白为什么没有一个git命令能做到这一点,我会说,因为它可以很容易地用两个现有的git命令来构造,它们中的每一个都很有用,没有另一个。