Answers:
截至2017年,它已包含在GitHub本身中。
他们使用的示例搜索是 repo:torvalds/linux merge:false crypto policy
来自https://github.com/blog/2299-search-commit-messages的 GIF图像
您曾经能够做到这一点,但是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.
-g
大多数常见用例的标志。我并没有对此进行过多研究,但是使用-g
,搜索似乎只能追溯到一个月。git log -g --grep=fix
而在develop
有8000〜跨越提交两年内回购的分支,只是去早在二月二
-g
标志至少5个月的提交。
更新(2017/01/05):
GitHub发布了一个更新,现在您可以从其UI内的提交消息中进行搜索。有关更多信息,请参见博客文章。
我有同样的问题,昨天与GitHub联系了:
由于他们将搜索引擎切换为Elasticsearch,因此无法使用GitHub UI搜索提交消息。但是该功能在团队的愿望清单上。
不幸的是,目前没有该功能的发布日期。
简短的答案是,您不能直接在github.com网站上搜索提交消息。目前,我们建议git grep
该线程上的其他人提出的本地解决方案。
在某个时间点,GitHub确实git grep
为单个存储库的提交消息提供了样式搜索。不幸的是,这种方法暴露了拒绝服务的行为,这可能导致文件服务器无法访问。因此,我们删除了git grep
搜索。
根据目前的估算,GitHub的提交数量约为800亿个大关。尽管Google工程师笑了我们的后盾,但这是要存储在ElasticSearch中的大量文档。我们希望使该数据集可搜索,但是这不是一个简单的项目。
git diff's
(意味着提交的内容,而不是提交元数据)
您可以使用Google抓取的存储库来执行此操作(结果因存储库而异)。
“更改许可证”站点:https : //github.com/*/*/commits
“更改许可证”网站:https : //github.com/*/*/commits/master
“更改许可证”站点:https : //github.com/twitter/*/commits/master
“更改许可证”站点:https : //github.com/twitter/some_project/commits
您现在可以搜索提交消息!(仍仅在master分支中)
2015年2月:考虑到当前基于Elasticsearch的搜索基础架构(于2013年1月推出),不确定是否有可能。
作为“从可靠的和/或官方来源获取”的答案,这是对负责在GitHub上介绍Elasticsearch的GitHub人员的采访(2013年8月)
蒂姆·皮斯(Tim Pease):我们这里有两种文档类型:一种是源代码文件,另一种是存储库。git的工作方式是您拥有提交,并且每个提交都有一个分支。存储库文档会跟踪已建立索引的特定存储库的最新提交。当用户将新的提交推送到Github时,我们然后从elasticsearch提取该存储库文档。然后,我们看到最近索引的提交,然后获得在此最近的推送与先前索引的内容之间已被修改,添加或删除的所有文件的列表。然后,我们可以继续并仅更新那些已更改的文档。我们不必每次有人按下就重新索引整个源代码树。
Andrew Cholakian:所以,我假设你们只索引master分支。
蒂姆·皮斯(Tim Pease):正确。您只是要进入那里的master分支的头,仍然有很多数据,20亿个文档,30 TB。
安德鲁·乔拉基安(Andrew Cholakian):真是太棒了。
[...]
蒂姆·皮斯(Tim Pease):在推入索引源代码的情况下,这是一个自愈过程。
我们拥有该存储库文档,该文档可跟踪上次索引的提交。如果我们错过了,恰好错过了那些提交失败的三个提交,则进入了下一个提交,我们仍在查看索引的上一个提交与通过此新推送看到的提交之间的差异。
您执行agit diff
,您将获得所有已更新,删除或添加的文件。您可以说:“好的,我们需要删除这些文件。我们需要添加所有这些文件。” 它是自我修复的,这是我们几乎对所有体系结构都采用的方法。
这一切都意味着并非所有存储库的所有分支都将使用该方法建立索引。
暂时无法进行全局提交消息搜索。
而蒂姆·皮斯本人确认 提交的信息不被索引。
请注意,并非不可能获得自己的本地克隆的Elasticsearch本地索引:请参阅“ 使用ElasticSearch搜索git存储库 ”
但是对于特定的回购协议,最简单的方法仍然是克隆它并执行以下操作:
git log --all --grep='my search'
(更多的选项位于“ 如何通过提交消息搜索Git存储库? ”)
在Eclipse中,这很有效,直到GitHub添加了功能:
如果您拥有存储库的本地版本,则可能需要尝试使用我写的这个原始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页面。(请注意,如果您的搜索词出现在成百上千的提交中,这很可能会使您的浏览器崩溃并占用您PC的CPU一段时间。)