Ripgrep feels a lot faster (basically instant) to me than the alternatives.
Even on very large repositories.
That's why I've switched to using it pretty exclusively now.
That's why I've switched to using it pretty exclusively now.
$ git clone --depth 1 https://github.com/BurntSushi/linux
$ cd linux
$ time LC_ALL=en_US.UTF-8 git grep -E '\w+_RESUME' | wc -l
1998
real 20.616
user 2:02.49
sys 0.363
maxmem 64 MB
$ time rg '\w+_RESUME' | wc -l
1998
real 0.127
user 0.673
sys 0.617
maxmem 26 MB
Both of these invocations are doing roughly equivalent work, including
respecting gitignores. Both of them are using a Unicode aware `\w` character
class. OK, so you might say you don't care about Unicode. That's fine, ripgrep
is still faster by an order of magnitude: $ time LC_ALL=C git grep -E '\w+_RESUME' | wc -l
1998
real 4.546
user 27.741
sys 0.420
maxmem 63 MB
With that said, `git grep` can now be made to use PCRE2, which gives it a
significant speed boost on this workload: $ time LC_ALL=en_US.UTF-8 git grep -P '(*UCP)\w+_RESUME' | wc -l
1998
real 0.894
user 5.821
sys 0.493
maxmem 63 MB
$ time LC_ALL=C git grep -P '\w+_RESUME' | wc -l
1998
real 0.517
user 2.962
sys 0.596
maxmem 59 MB
ripgrep can do the same as of this release, but faster: $ time rg -P '\w+_RESUME' | wc -l
1998
real 0.511
user 4.795
sys 0.544
maxmem 24 MB
$ time rg -P --no-pcre2-unicode '\w+_RESUME' | wc -l
1998
real 0.422
user 4.119
sys 0.479
maxmem 24 MB
Do these performance differences matter to you? Maybe not. But you said you
couldn't understand; hopefully the numbers above add some clarity. :-) On top
of that, ripgrep works just as well outside of git repos, on huge log files,
binary data or even in shell pipelines.