linux - 如果我们想在版本化的源代码中搜索,使用 git grep 比使用普通 grep 更好吗?

标签 linux git grep

在 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 传递给 grepgit grep 来获得这种行为)
  • grep.extendedRegexp:始终使用扩展正则表达式(您可以将 -E 传递给 grepgit grep 来获得这种行为)

在实践中

实际上,我将 gg 别名为 git grep -En,这几乎总是能满足我的要求。

关于linux - 如果我们想在版本化的源代码中搜索,使用 git grep 比使用普通 grep 更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557684/

相关文章:

python - 我的 tmux 脚本中的这个 sleep 命令是否合理?如果是,为什么?

eclipse - windows下搭建开发环境git + centos + Eclipse egit

Git 推送到网络驱动器 : Cannot pread pack file

Ruby 相当于 "grep -C 5"以获取匹配项周围的行的上下文?

linux - 如何在 printf 之后使用 uniq

linux - 在 Mint 15 上使用 Apache2 设置多个虚拟主机时出错

java - 使用 MinGW 为 Windows 构建一个 Linux 库

git - 在 Sublime Text 3.2 中关闭 git 集成

linux - sed 正则表达式不贪心?

regex - 将文件夹中的所有图像移动到子文件夹,并将文本文件中对这些图像的所有引用更新到它们的新位置?