在 git 存储库中,使用 git grep
与旧的 grep
相比有什么区别/好处吗?
一个例子是?
最佳答案
两者非常相似。主要区别在于 git grep
默认在 git 跟踪的文件中搜索。
例子
如果我想在我的项目中找到 foo
,我可以使用 git grep
或好的 ol' 独立 grep
:
git grep foo
grep -R foo .
git grep
版本将只搜索 git 跟踪的文件,而 grep
版本将搜索目录中的所有内容。到目前为止如此相似;根据您想要实现的目标,任何一种都可能更好。如果我们想将搜索限制为仅
.rb
文件怎么办?git grep foo -- *.rb
grep -R --include=*.rb foo .
普通的旧
grep
版本变得有点冗长,但如果您习惯使用 grep
,那可能不是问题。他们仍然不会搜索完全相同的文件,但这同样取决于您想要实现的目标。在以前的项目版本中搜索怎么样?
git grep foo HEAD^
git checkout HEAD^; grep -R foo .; git checkout -
这就是
git grep
真正不同的地方:您可以在项目的另一个修订版中进行搜索,而无需先检查它。不过,这对我来说并不是经常出现的情况。我通常想在我 checkout 的项目的版本中搜索。配置 git grep
有一些
git config
变量可以修改 git grep
的行为并避免需要传递几个命令行参数:grep.lineNumber
:始终显示匹配的行号(您可以将 -n
传递给 grep
和 0x251812123123123131231313131318123131231812313123131312313131231312313131312313123123131231312312314git grep
:始终使用扩展的正则表达式(您可以将 grep.extendedRegexp
传递给 -E
和 0x251813141 到 0x251813231231313131313123131313131313131在实践中
实际上,我将
grep
别名为 git grep
,这几乎总是我想要的。关于linux - 如果我们想在版本化的源代码中搜索,使用 git grep 比普通的 grep 更好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17557684/