gitgrep

How to git grep in the whole tree when I'm in a subdirectory?


Normally when I issue git grep, it will only search the current directory and below, for instance

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

How can I tell git grep "search the entire tree, no matter the current working directory I'm in"?


Solution

  • Git aliases that run shell commands are always executed in the top level directory (see the git config man page), so you can add this to your .gitconfig file:

    [alias]
        rgrep = !git grep
    

    Alternatively, you could use git rev-parse --show-toplevel to get the root directory, which you could then pass to git grep as the basis of a script or alias:

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