有没有办法搜索git存储库,git grep但从搜索中排除某些路径/目录/文件?像--exclude普通grep命令中的选项一样.
如果你很好奇:我不想使用普通的grep,因为它比git grepgit存储库的大小要慢得多.
onl*_*one 177
在git 1.9.0中,"魔术词" exclude被添加到pathspecs中.因此,如果您想foobar在每个文件中搜索除了匹配的文件,*.java您可以执行以下操作:
git grep foobar -- './*' ':(exclude)*.java'
或者使用!"简短形式"进行排除:
git grep foobar -- './*' ':!*.java'
请注意,使用排除时pathspec,您必须至少有一个"包含" pathspec.在上面的例子中,这是./*(递归地包括当前目录下的所有内容).
您还可以使用类似git grep foobar -- ':!*.java'(简短形式./*:)的内容来包含回购顶部的所有内容.但是你可能也想调整你的排除:(top)从顶部开始:( :/否则它只会排除pathspec你当前目录下的文件).
有在一个允许所有的"咒语"一个很好的参考:/!*.java,在git-scm.com(或只*.java).出于某种原因,kernel.org上的文档确实已经过时了,即使它们经常出现在谷歌搜索中.
kyn*_*nan 60
更新:对于git> = 1.9,对排除模式有本机支持,请参阅onlyone的答案.
这似乎是倒退,但您可以传递与您的排除模式不匹配的文件列表,git grep如下所示:
git grep <pattern> -- `git ls-files | grep -v <exclude-pattern>`
grep -v返回每个不匹配的路径<exclude-pattern>.请注意,它git ls-files也接受一个--exclude参数,但这仅适用于未跟踪的文件.
小智 11
您可以通过在存储库中创建属性文件来将文件或目录标记为二进制文件,例如
$ cat .git/info/attributes 
directory/to/ignore/*.* binary
directory/to/ignore/*/*.* binary
another_directory/to/also/ignore/*.* binary
二进制文件中的匹配项不带包含行列出,例如
$ git grep "bar"
Binary file directory/to/ignore/filename matches
other_directory/other_filename:      foo << bar - bazz[:whatnot]
| 归档时间: | 
 | 
| 查看次数: | 31152 次 | 
| 最近记录: |