我的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"中。状态,不应该被任何东西在"期间"使用。状态。