How to git grep only a set of file extensions

2019-03-25 09:10发布

How do you perform a git grep and limit the files checked to a set of files. I would like to be able to grep the contents of .cpp and .h files looking for MyFunc. eg:

git grep "MyFunc" -- *.[hc]*

However this also matches, .c files and .cs files.

2条回答
我命由我不由天
2楼-- · 2019-03-25 09:43

Use:

git grep "MyFunc" -- '*.cpp' '*.h'

The quotes are necessary so that git expands the wildcards rather than the shell. If you omit them, it'll only search files in the current directory, rather than including subdirectories.

查看更多
干净又极端
3楼-- · 2019-03-25 09:49

This can be achieved when using git bash in Windows by using:

git grep "MyFunc" -- *.{cpp,h}

or even simpler:

git grep "MyFunc" -- *.cpp *.h

The explanation of pathspec on the git glossary mentions that patterns are matched using fnmatch(3). Which matches patterns (including multiple characters) as described by Shell and Utilities volume of IEEE Std 1003.1-2001, Section 2.13.1 and leads to basic regular expressions matching multiple characters and gave me the first solution.

Further research lead me to the second solution by looking into documentation on glob.

查看更多
登录 后发表回答