GitHub:搜索旧版本的文件

nor*_*ski 93 git github

我知道使用GitHub我可以在回购中搜索我文件的所有当前版本.但是,我还想搜索旧版本的repo文件.例如,比方说,我曾经在我的代码中有一个名为get_info()的函数,但是在几个版本之前删除了它,是否可以搜索get_info并找到代码.如果不能使用GitHub,是否可以从git命令行?

编辑

感谢@Mark Longair展示如何从git命令行完成此操作.如果在GitHub中无法实现,那将是一个很棒的功能.

Mar*_*air 111

目前,我不相信可以在github网站上的存储库代码的完整历史记录中进行搜索 - 最接近的是在本页的"代码搜索"选项中搜索存储库的当前代码.

但是,从命令行,您可以找到引入或删除get_info使用-S选项提及的行的任何提交git log.例如:

git log -Sget_info -p
Run Code Online (Sandbox Code Playgroud)

(nb -S和搜索词之间应该没有空格)

(另请注意:要搜索多个单词,请环绕'):

git log -S'get info' -p
Run Code Online (Sandbox Code Playgroud)

因此,至少应该找到首次引入函数的提交和删除函数的提交.我添加了-p所以你也可以看到补丁 - 如果很多提交引入了改变,提到了可能有用的功能.如果该函数仅在另一个分支上,则用于--all搜索所有分支也可能很有用.

Jefromi在下面的评论中指出,git 1.7.4将引入该-G选项作为替代 - 这一变化在Junio Hamano(git maintainer)最近的博客文章中进行了总结:http://gitster.livejournal.com/48191.html

  • -S选项*确实*查看代码 - 它找到任何提交,其中`get_info`包含在提交引入的diff中.您可能会对`--grep`选项感到困惑,该选项会搜索日志消息. (9认同)
  • @normski:最近版本的 git 添加了类似的 `-G` 选项,它使用正则表达式而不是固定字符串。 (3认同)
  • 是的,我知道我可以搜索评论,但是搜索代码呢? (2认同)
  • @Anthony Damico:是的,只需引用搜索字符串,例如`git log -S'get info'-p` (2认同)

Mik*_*kel 14

git log -G'your text' -p --all
Run Code Online (Sandbox Code Playgroud)

请注意文档中的以下内容;

[...]考虑在同一文件中进行以下差异的提交:

git log -G'your text' -p --all
Run Code Online (Sandbox Code Playgroud)

虽然 git log-G"frotz\(nitfol"将显示此提交,但 git log-S"frotz\(nitfol" --pickaxe-regex不会(因为该字符串出现的次数没有改变)。

感谢马克和卡斯卡贝尔指出了正确的方向