如何在GitHub上search提交消息?

不是在Git仓库中 ,而是在GitHub中 – 我该如何search特定仓库/分支的提交信息?

截至2017年,这是GitHub本身的function。

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

在这里输入图像说明 GIF从https://github.com/blog/2299-search-commit-messages

你曾经能够做到这一点,但Github在2013年中期的某个时候删除了这个function。 为了达到这个目的,你可以这样做:

 git log -g --grep=STRING 

(如果您想search其他分支和悬挂提交,请使用-g标志。)

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

更新(2017/01/05):
Github发布了一个更新,允许您现在在他们的用户界面中search提交消息。 查看博客post以获取更多信息。


我有同样的问题,昨天联系了一个@Github:

由于他们将search引擎切换到ElasticSearch,因此无法使用Github UIsearch提交消息。 但是这个function在球队的心愿中。

不幸的是,目前没有该function的发布date。

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

在一个时间点,GitHub确实提供了一个git grep风格的search,超过了提交单个存储库的消息。 不幸的是,这种方法暴露了可能导致文件服务器无法访问的拒绝服务。 出于这个原因,我们删除了git grepsearch。

当前的信封估计将GitHub中的提交数量设置在800亿左右。 尽pipeGoogle的工程师背后嘲笑,但这是ElasticSearch中存储的大量文档。 我们很乐意使这个数据集可search,但它不是一个微不足道的项目。

这是从GitHub中删除。 我用:

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

在这里输入图像说明

您也可以按作者过滤:

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

从search代码的帮助页面看来,这似乎还不可能。

您可以search回购中的文本,包括select要search的文件或path的function,但不能指定要在提交中进行search。

也许build议这个给他们 ?

您可以使用已被Google抓取的回购站进行此操作(结果因回购到回购而有所不同)

search所有爬行回购的所有分支的“更改许可证”

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

search所有已爬网回购站的“主要分支”“更改许可证”

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

search所有爬行的twitter回购“master change”

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

searchtwitter / some_project回购所有分支的“更改许可证”

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

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

您现在可以search提交消息 ! (仍然只在主分支)

assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


2015年2月:考虑到目前基于Elasticsearch的search基础架构( 2013年1月推出),无法确定这是否可行。

作为“从可信和/或官方消息来源”的回答,下面是GitHub负责人在GitHub上介绍Elasticsearch的采访 (2013年8月)

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

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

Tim Pease:正确。 这只是你要进入的主分支的头,还有大量的数据,二十亿个文档,30TB。

Andrew Cholakian:这真是太棒了。

 [...] 

Tim Pease:通过对推送源代码进行索引,这是一个自我修复的过程。
我们有那个logging最后索引提交的存储库文档。 如果我们错过了,只是错过了那些作业失败的三个提交,下一个进行的提交,我们仍然看着前一个提交的索引与我们看到的这个新索引之间的差异。
你做一个git diff ,你会得到所有已经更新,删除或添加的文件。 你可以说,“好吧,我们需要删除这些文件。 我们需要添加这些文件,以及所有这些。“这是自我修复,这是我们采取了几乎所有的体系结构的方法。

这一切都意味着并非所有回购的所有分支都会以这种方式进行索引。
全局提交消息search现在不可用。
Tim Pease本人确认 提交消息没有编入索引

请注意,获取本地克隆的自己的elasticsearch本地索引并不是不可能的:请参阅“ 使用ElasticSearchsearchgit存储库 ”

但对于一个特定的回购,最简单的仍然是克隆它,并做一个:

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

(更多选项在“ 如何通过提交消息searchGit存储库? ”)

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

从terminal去你的仓库,inputgitk

在gui中间,theres是一个search框。 它提供了一个很好的selectfilter:

搜索栏

范围 – 包含,触摸path,添加/删除string,改变行匹配

匹配types – 确切/ IgnCase /正则expression式

search字段 – 所有字段/标题/评论/提交者

这在eclipse中运行良好,直到github增加了这个function:

在这里输入图像说明

https://wiki.eclipse.org/EGit/User_Guide#Searching_for_commits

如果你正在使用Ubuntu(或者其他的Unix操作系统),并且有一个本地版本的repo,那么你可能需要尝试一下我写的这个简单的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/replace为您的回购的实际Githuburl,将脚本保存到某处(例如,将其保存为githubsearch.sh ,使其可执行( chmod +x githubsearch.sh ),然后添加以下内容别名到你的~/.bashrc文件:

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

然后,从你的git仓库中的任何地方,只要在docker做这件事:

 githubsearch "what you want to search for" 

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

我只在Ubuntu上进行了testing,并且对shell脚本知之甚less,不知道这是否适用于其他基于Unix的操作系统 – 特别是我不知道我在这里使用的是否是Bash特有的。 随意评论或编辑添加兼容性信息。