如何从git grep搜索中排除某些目录/文件

有没有办法使用git grep来搜索git存储库,但排除搜索中的某些路径/目录/文件? 像正常的grep命令中的--exclude选项一样。

如果您好奇:我不想使用普通的grep,因为当git存储库的大小很大时,它比git grep慢得多。


这是不可能的,但最近已经讨论过了。 链接中提出的解决方法:

您可以将*.dll放入.gitignore文件,然后将git grep --exclude-standard

编辑看到唯一的答案,因为Git 1.9.0是可能的。


在git 1.9.0中,“magic word” exclude被添加到pathspec 。 所以如果你想在除了匹配*.java文件之外的每个文件中搜索foobar ,你可以这样做:

git grep foobar -- './*' ':(exclude)*.java'

或者使用! 排除的“简写”:

git grep foobar -- './*' ':!*.java'

请注意,在使用排除pathspec ,您必须至少有一个“全包” pathspec 。 在上面的例子中,这是./* (递归地包含当前目录下的所有内容)。

您还可以使用如下内容:(top) (简写:/ )来包含回购顶部的所有内容。 但是,您可能还想调整排除pathspec以从顶部开始:/!*.java (否则它只会从当前目录下排除*.java文件)。

对于pathspec中的pathspec允许的所有“魔法词语”(或者仅仅是git help glossary )都有很好的参考。 出于某种原因,kernel.org上的文档实际上是过时的,即使它们经常在谷歌搜索中首先出现。


更新:对于git> = 1.9,本机支持排除模式,请参阅唯一的答案。

这可能看起来倒退了,但是你可以传递一个不匹配排除模式的文件列表到git grep像这样:

git grep <pattern> -- `git ls-files | grep -v <exclude-pattern>`

grep -v返回每个不匹配<exclude-pattern>路径。 请注意, git ls-files也需要一个--exclude参数,但这只适用于未跟踪的文件。

链接地址: http://www.djcxy.com/p/8293.html

上一篇: How to exclude certain directories/files from git grep search

下一篇: How can I exclude directories from grep