列出git根据.git/info/exclude中的规则完全忽略的文件



我的repo有一个很大的.gitignore。我在.git/info/exclude中也有一些规则,因为我不想让我的工作流程影响到repo:我使用某些工具和某些生成文件的过程,我既不想提交到repo,也不想在.gitignore中列出。这些是我的"私人忽略文件"。

在最近的一个项目中,我经历了一个有趣的情况:运行一些带有一些排除文件的测试以奇怪的方式中断了测试。因此,在运行测试之前(需要运行几个小时),我需要确保摆脱了烦人的私有文件。

列出所有排除的文件不是一个选项:

git ls-files --other

这会产生一个太大的列表,没有任何用处。

:

git ls-files --other --exclude-standard

不列出通过.git/info/exclude(或通过.gitignore)规则排除的文件

这与我想要的相反:

git ls-files -o -X .git/info/exclude

列出除之外的所有忽略文件.git/info/exclude

这是正确的方向:

git ls-files -o -X .gitignore

但是我需要手动找到所有文件夹中的所有.gitignore(repo非常大,有很多.gitignore)

这个很好:

git check-ignore -v *

But不是递归的,并且没有recurse选项。

我想我可以区分这两个:

git ls-files -o
git ls-files -o -X .git/info/exclude

但真的! ?有没有更好的方法来列出被一个特定规则文件排除的文件?

编辑

这是我最接近的:

find . -type f | git check-ignore -v --stdin | grep '.git/info/exclude'

它只列出文件(我认为是git轨道无论如何),它很慢。我希望内部git命令更快。

您要查找的命令是:

git ls-files --ignored --others --exclude-from=.git/info/exclude

换句话说,您忘记包含--ignored选项来显示被忽略的文件。

--ignored选项与--cached一起使用,显示索引中已经被忽略的文件,或者与--others一起使用,显示被忽略的未被跟踪的文件。

除了Enrico Compidoglio的答案(这可能是自动化方式中最好的方法)之外,您还可以暂时隐藏(即重命名).git/info/exclude文件并使用git ls-files --other --exclude-standard,然后取消隐藏您的个人排除文件。尝试自动化的缺点是,如果两个实体"同时"尝试这样做,或者当其他Git操作正在运行时,就会显示出原子性的缺乏。也就是说,涉及到三个步骤,因此Git存储库在"before"、"during"one_answers"after"中。状态,不应该被任何东西在"期间"使用。状态。

最新更新