【问题标题】:GitHub: searching through older versions of filesGitHub:搜索旧版本的文件
【发布时间】:2011-01-16 13:09:45
【问题描述】:

我知道使用 GitHub,我可以在存储库中搜索所有当前版本的文件。但是,我还想搜索旧版本的 repo 文件。比如我以前的代码中有一个叫get_info()的函数,但在几个版本前删除了,是否可以搜索get_info找到代码。如果无法使用 GitHub,是否可以从 git 命令行?

编辑

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

【问题讨论】:

    标签: git github


    【解决方案1】:

    目前,我认为不可能在 github 网站上的存储库代码的完整历史记录中进行搜索 - 最接近的是使用 this page 上的“代码搜索”选项在存储库的当前代码中进行搜索.

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

    git log -Sget_info -p
    

    (注意,-S 和搜索词之间不应有空格)

    (另请注意:要搜索多个单词,请用'括起来):

    git log -S'get info' -p
    

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

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

    【讨论】:

    • 是的,我知道我可以搜索 cmets,但是搜索代码呢?
    • -S 选项确实 在代码中查找 - 它会查找提交引入的差异中包含 get_info 的任何提交。您可能会对搜索日志消息的 --grep 选项感到困惑。
    • @normski:最近版本的 git 添加了类似的 -G 选项,它采用正则表达式而不是固定字符串。
    • @Jefromi:感谢您提及 - 我已将其添加到答案中,希望没关系。
    • @Anthony Damico:是的,只需引用搜索字符串,例如git log -S'get info' -p
    【解决方案2】:
    git log -G'your text' -p --all
    

    请注意docs中的以下内容;

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

    +    return frotz(nitfol, two->ptr, 1, 0);
    ...
    -    hit = frotz(nitfol, mf2.ptr, 1, 0);
    

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

    感谢 Mark 和 Cascabel 指出了正确的方向

    【讨论】:

    • 这对我有用,因为接受的答案很短!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2021-10-12
    • 2017-01-25
    相关资源
    最近更新 更多