如何执行git grep并将检查的文件限制为一组文件。我想要grep .cpp和.h文件中的内容,查找MyFunc。
git grep "MyFunc" -- *.[hc]*
然而这也会匹配 .c 和 .cs 文件。
如何执行git grep并将检查的文件限制为一组文件。我想要grep .cpp和.h文件中的内容,查找MyFunc。
git grep "MyFunc" -- *.[hc]*
然而这也会匹配 .c 和 .cs 文件。
使用:
git grep "MyFunc" -- '*.cpp' '*.h'
引号必须使用,这样git才能展开通配符,而不是由shell来展开。如果省略引号,git只会搜索当前目录中的文件,而不包括子目录。
git grep "MyFunc" -- *.{cpp,h}
git grep "MyFunc" -- *.cpp *.h
关于Git词汇表中的pathspec解释提到,使用fnmatch(3)进行模式匹配。该函数匹配模式(包括多个字符),如IEEE Std 1003.1-2001的Shell and Utilities卷,第2.13.1节所述,并导致基本正则表达式匹配多个字符,给了我第一个解决方案。
进一步研究通过查看glob文档,带来了第二个解决方案。
*.{cpp,h}
和*.cpp *.h
两者只会在当前目录下搜索文件,而不会在子目录中搜索,因为它们是由shell(而不是git)展开的。如果要包括子目录,请使用:'*.cpp' '*.h'
(如果你想知道的话,*.{cpp,h}
这种语法不起作用,因为git无法理解它)。 - John Mellor
git grep "MyFunc" -- **/*.cpp
。 - Chris_128