在 git 存储库中,使用 git grep
与旧的 grep
有什么区别/好处?
一个例子是什么?
最佳答案
两者非常相似。主要区别在于 git grep
默认在 git 跟踪的文件中搜索。
示例
如果我想在我的项目中找到 foo
,我可以使用 git grep
或独立的 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
和git grep
来获得这种行为)grep.extendedRegexp
:始终使用扩展正则表达式(您可以将-E
传递给grep
和git grep
来获得这种行为)
在实践中
实际上,我将 gg
别名为 git grep -En
,这几乎总是能满足我的要求。
关于linux - 如果我们想在版本化的源代码中搜索,使用 git grep 比使用普通 grep 更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557684/