如何git grep只有一组文件扩展名

stk*_*sfr 13 git grep file-extension

如何执行git grep并将检查的文件限制为一组文件.我希望能够grep查找MyFunc的.cpp和.h文件的内容.例如:

git grep "MyFunc" -- *.[hc]*
Run Code Online (Sandbox Code Playgroud)

但是,这也匹配.c文件和.cs文件.

Joh*_*lor 12

使用:

git grep "MyFunc" -- '*.cpp' '*.h'
Run Code Online (Sandbox Code Playgroud)

引号是必要的,以便git扩展通配符而不是shell.如果省略它们,它只会搜索当前目录中的文件,而不是包含子目录.


stk*_*sfr 5

在Windows中使用git bash时,可以通过以下方式实现:

git grep "MyFunc" -- *.{cpp,h}
Run Code Online (Sandbox Code Playgroud)

甚至更简单:

git grep "MyFunc" -- *.cpp *.h
Run Code Online (Sandbox Code Playgroud)

git词汇表的pathspec的解释提到,使用fnmatch(3)匹配模式。它按照IEEE Std 1003.1-2001Shell and Utilities卷第2.13.1节中的描述匹配模式(包括多个字符)并导致匹配多个字符的基本正则表达式,这给了我第一个解决方案。

进一步的研究通过研究关于glob的文档将我引向第二种解决方案

  • 警告:*。{cpp,h}和* .cpp * .h都仅在当前目录中搜索文件,而不在子目录中搜索文件,因为它们是由外壳程序(而不是git)扩展的。而是应包含子目录,而应使用:''* .cpp''* .h'`(以防万一,''*。{cpp,h}'`不起作用,因为git无法理解该语法)。 (5认同)