当我在子目录中时,如何在整个树中git grep?

时间:2012-06-03 07:18:32

标签: git grep

通常情况下,当我发出git grep时,它只会搜索当前目录及其下方,例如

$ cat A
1
$ cd d
$ cat B
1
$ git grep 1
B:1
$ cd ..;git grep 1
A:1
B:1

我怎么能告诉git grep“搜索整个树,无论我当前的工作目录是什么?”

3 个答案:

答案 0 :(得分:10)

运行shell命令的Git别名总是在顶级目录中执行(请参阅git config man page),因此您可以将其添加到.gitconfig文件中:

[alias]
    rgrep = !git grep

或者,您可以使用git rev-parse --show-toplevel获取根目录,然后可以将其作为脚本或别名的基础传递给git grep

git grep $pattern -- `git rev-parse --show-toplevel`

答案 1 :(得分:10)

:/魔术路径

git grep pattern -- :/
对于此命令和其他命令,

适用于Git 1.9.1,如:https://stackoverflow.com/a/31696782/895245

中所述

TODO在浏览文档后我找不到明确的文档参考,但在发行说明中有时会提到它:

Documentation / RelNotes / 1.7.6.txt:39:是一个无操作,但“git add -u:/”会添加更新内容

答案 2 :(得分:0)

将此添加到您的Git配置文件中,以创建一个grepall别名,它可以执行您想要的操作:

[alias]
    grepall = !git grep

(非本地别名,例如以!开头的别名,总是从存储库的顶层运行。)