如何在git repo中grep文件?

Pet*_*son 32 git grep

我喜欢git grep搜索签入回购的所有文件.这很棒.但是可以使用它(或其他一些git命令)来查找文件(独立于内容)吗?

目前我这样做:

$ find . | grep middleware
Run Code Online (Sandbox Code Playgroud)

哪个有效,但它没有使用git索引,这意味着它会遍历每个找到的文件,并报告与之匹配的文件.gitignore.

任何聪明的技巧的想法?

ara*_*nid 44

也许你想要git ls-files哪个列出索引中的文件?(并自动调整git工作目录中的当前目录)

  • 我们可以使用命令``git ls-files"*.sh"``或``git ls-files | grep .sh`` (3认同)

Ste*_*ven 23

我想git ls-files会为你做的伎俩.

所以:

 git ls-files "*middleware*"
Run Code Online (Sandbox Code Playgroud)


Mik*_*itz 5

在这种情况下,您可能会考虑使用非 git 解决方案。

find本身有能力以更有效的方式做你想做的事情,而不是将结果输入grep

find . -name 'middleware*'
Run Code Online (Sandbox Code Playgroud)

您将需要引用该模式,以便*在传递给find.

有一个功能强大的程序ack,它比 grep 更好,而我最喜欢的用途之一ack正是您提到的 —— 在树中查找与模式匹配的文件。ack不过,使用 perl regexp,而不是 shell fileglob。

ack -g middleware
Run Code Online (Sandbox Code Playgroud)

如果你想搜索的那些文件,ack让你这样做更容易比在结果编写shell循环findgreps各自文件中。比较两者,看看你更喜欢哪一个:

for f in $(find . -name 'middleware*')
do
    grep 'pattern in file' $f
done
Run Code Online (Sandbox Code Playgroud)

相对

ack -G 'middleware' 'pattern in file'
Run Code Online (Sandbox Code Playgroud)

我强烈建议ack将其添加到您的工具包中。