如何在GitHub上搜索提交消息?

不是在Git存储库中,而是在GitHub中——我如何搜索特定存储库/分支的提交消息?

142599 次浏览

搜索代码上的帮助页来看,这似乎还不可能。

您可以在存储库中搜索文本,包括选择要搜索的文件或路径的能力,但不能指定要在提交中搜索。

也许建议他们这样做 ?

你过去可以这样做,但GitHub在2013年年中的某个时候删除了这个功能。要在本地实现这一点,您可以这样做:

git log -g --grep=STRING

(如果你想搜索其他分支和悬空提交,使用-g标志。)

-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.

如果你有一个本地版本的存储库,你可能想尝试一下我写的这个粗糙的shell脚本,它可以在默认浏览器的新选项卡中打开与你的搜索词匹配的所有提交的GitHub页面:

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

只需将https://github.com/RepoOwnerUserName/RepoName/替换为你仓库的实际GitHub URL,将脚本保存在某个地方(例如githubsearch.sh,使其可执行(chmod +x githubsearch.sh),然后将以下别名添加到你的~/.bashrc文件:

alias githubsearch='/path/to/githubsearch.sh'

然后,在Git存储库的任何地方,在终端上执行以下操作:

githubsearch "what you want to search for"

任何与你的搜索词(不区分大小写)匹配的提交都会在你的浏览器中打开相应的GitHub页面。(请注意,如果你的搜索词出现在数百次提交中,这可能会使你的浏览器崩溃,并在一段时间内吃掉你的电脑CPU。)

更新(2017/01/05):

GitHub发布了一个更新,允许你现在从他们的UI中搜索提交消息。更多信息请参见博客


我也有同样的问题,昨天联系了GitHub的人:

由于他们将搜索引擎切换到Elasticsearch,因此无法使用GitHub UI搜索提交消息。但是这个功能在团队的愿望清单上。

不幸的是,该函数目前还没有发布日期。

这在Eclipse中工作得很好,直到GitHub添加了这个功能:

Enter image description here

EGit/User Guide, Searching for commits

由于这已经从GitHub中删除,我一直在Linux上使用gitk来做到这一点。

从终端转到存储库并键入gitk

在GUI的中间,有一个搜索框。它提供了一个很好的过滤器:

搜索栏

范围包含,触摸路径,添加/删除字符串,改变行匹配

匹配类型—Exact/IgnCase/Regexp

搜索字段-所有字段/标题/评论/提交者

这已从GitHub删除。我使用:

$git log --all --oneline | grep "search query"

enter image description here

你也可以通过作者筛选:

$git log --all --oneline --author=rickhanlonii | grep "search query"

2017年1月更新(两年后):

现在可以搜索提交消息 !(仍然只在主分支中)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


2015年2月:考虑到当前的搜索基础设施基于Elasticsearch(引入了2013年1月),不确定这是否可能。

作为“来自可信和/或官方来源”的答案,下面是采访了GitHub负责Elasticsearch的人(2013年8月)

Tim Pease:我们在那里有两种文档类型:一个是源代码文件,另一个是存储库。git的工作方式是你有提交,每个提交都有一个分支。存储库文档跟踪已被索引的特定存储库的最近提交。当用户向Github推送一个新提交时,我们会从elasticsearch中提取该存储库文档。然后,我们看到最近索引的提交,然后我们得到在最近的推送和之前索引的文件之间被修改、添加或删除的所有文件的列表。然后我们可以继续,更新那些已经更改的文档。我们不需要每次有人推送时都重新索引整个源代码树。

Andrew Cholakian: 我假设,你们只索引主分支。

蒂姆·皮斯:正确。它只是主分支的头,你要进入那里,这仍然是很多数据,20亿份文档,30tb。

Andrew Cholakian:这是非常巨大的。

[...]
Tim Pease:在push上索引源代码,这是一个自我修复的过程。
我们有一个存储库文档,它跟踪最后一次索引提交。如果我们错过了三次作业失败的提交,下一个提交,我们仍然在看我们索引的上一个提交和我们在这个新推送中看到的提交之间的差异。
你执行git diff,就会得到所有已更新、删除或添加的文件。你可以说,“好的,我们需要删除这些文件。我们需要添加这些文件等等。”它是自我修复的,这是我们对几乎所有架构所采取的方法
这意味着不是所有所有的分支将用该方法进行索引。
目前无法使用全局提交消息搜索。
蒂姆·皮斯本人也证实了这一点 提交消息没有索引.

请注意,获得本地克隆的自己的elasticsearch本地索引并非不可能:参见"使用ElasticSearch搜索git存储库"

但对于特定的回购,最简单的方法仍然是克隆它,并执行以下操作:

git log --all --grep='my search'

(更多选项在"如何通过提交消息搜索Git存储库?")

简单的回答是,你不能直接在github.com网站上搜索提交消息。目前,我们推荐这个线程中其他人提出的本地git grep解决方案。

在某个时间点上,GitHub确实为单个存储库提供了git grep风格的提交消息搜索。不幸的是,这种方法暴露了拒绝服务,可能导致文件服务器不可访问。因此,我们删除了git grep搜索。

目前粗略估计,GitHub的提交次数大约在800亿次左右。尽管谷歌的工程师们在背后嘲笑我们,但这在ElasticSearch中存储的文档数量相当大。我们很想让这个数据集可以搜索,但这不是一个微不足道的项目。

您可以对谷歌爬取的存储库执行此操作(结果因存储库而异)。

搜索所有爬取存储库的所有分支,查找“更改许可”

“更改许可证”网站:https://github.com/ * / * /提交

搜索所有爬虫库的主分支“change license”:

“更改许可证”网站:https://github.com/ * / * /提交/主人

搜索所有爬过的twitter存储库的主分支“更改许可证”

“更改许可证”网站:https://github.com/twitter/ * /提交/主人

搜索twitter/some_project存储库的所有分支,查找“change license”

“更改许可证”网站:https://github.com/twitter/some_project/commits

截至2017年,它是GitHub本身中包含的功能。

他们使用的示例搜索是repo:torvalds/linux merge:false crypto policy

enter image description here 来自https://github.com/blog/2299-search-commit-messages的GIF图像

截至2019年年中

  1. 左上角搜索框中键入您的查询
  2. 打击输入
  3. 点击“Commits"

截图:

enter image description here

这里是快速的答案这是可能的! !

在github搜索框(左上)简单地搜索如下:

repo:torvalds/linux merge:false mmap

即:

enter image description here

这是结果:

enter image description here

阅读更多在这里

在Github上使用高级搜索与其他答案的组合似乎是最简单的。它基本上是一个搜索字符串构建器。 https://github.com/search/advanced < / p >

例如,我想找到Autodesk/maya-usd中包含"USD"的所有提交; enter image description here < / p >

然后在搜索结果中可以从左边的列表中选择commit: enter image description here < / p >