不是in a Git repo,而是专门用GitHub - 我如何仅搜索特定仓库/分支的提交消息?
答案 0 :(得分:202)
您曾经能够这样做,但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.
答案 1 :(得分:132)
更新(2017/01/05):
Github发布了一个更新,允许您现在在其UI中的提交消息中进行搜索。有关详细信息,请参阅blog post。
我有同样的问题,昨天联系了某人@Github:
由于他们将搜索引擎切换到ElasticSearch,因此无法使用Github UI搜索提交消息。但该功能是在团队的愿望清单上。
不幸的是,目前没有该功能的发布日期。
答案 2 :(得分:58)
答案 3 :(得分:56)
简短的回答是,您无法直接在github.com网站上搜索提交消息。目前,我们建议本线程的其他人提出本地git grep
解决方案。
在某个时间点,GitHub确实为单个存储库提交了git grep
样式搜索提交消息。不幸的是,这种方法暴露了拒绝服务,可能导致文件服务器无法访问。出于这个原因,我们删除了git grep
搜索。
当前的封套估计数将GitHub中的提交数量提高到800亿左右。虽然谷歌工程师在我们的背后笑了笑,但这是在ElasticSearch中存储的相当多的文档。我们很乐意对这个数据集进行搜索,但这不是一个简单的项目。
答案 4 :(得分:44)
这已从GitHub中删除。我用:
$git log --all --oneline | grep "search query"
您还可以按作者过滤:
$git log --all --oneline --author=rickhanlonii | grep "search query"
答案 5 :(得分:21)
在searching code的帮助页面上,似乎尚无法做到这一点。
您可以在回购中搜索文本,包括选择要搜索的文件或路径的功能,但不能指定要在提交中搜索。
答案 6 :(得分:19)
你可以使用谷歌抓取的回购(结果从回购到回购不同)来做到这一点
搜索所有已抓取存储库的所有分支,以便更改许可证"
"更改许可证"网站:https://github.com/*/*/commits
搜索所有已抓取存储库的主分支,以便更改许可证"
"更改许可证"网站:https://github.com/*/*/commits/master
搜索所有已抓取的Twitter回购的主分支,以便更改许可证"
"更改许可证"网站:https://github.com/twitter/*/commits/master
搜索twitter / some_project repo的所有分支以获取"更改许可证"
"更改许可证"网站:https://github.com/twitter/some_project/commits
答案 7 :(得分:14)
Update January 2017(两年后):
您现在可以搜索提交消息! (仍然只在主分支中)
2015年2月:考虑到当前基于Elasticsearch的搜索基础架构(引入in January 2013),确定无法做到这一点。
作为答案"借鉴可信和/或官方来源",这里是interview done with the GitHub people in charge of introducing Elasticsearch at GitHub(2013年8月)
Tim Pease :我们有两种文档类型:一种是源代码文件,另一种是存储库。 git的工作方式是你有提交,每个提交都有一个分支。存储库文档会跟踪已编制索引的特定存储库的最新提交。当用户将新提交推送到Github时,我们从elasticsearch中提取该存储库文档。然后我们看到最近的索引提交,然后我们得到一个列表,列出了在最近的推送和我们之前索引的内容之间已经修改,添加或删除的所有文件。然后我们可以继续更新那些已更改的文档。每次有人推动时,我们都不必重新索引整个源代码树。
Andrew Cholakian:所以,你们只是索引,我假设是主分支。
蒂姆皮斯:正确。它只是你要进入那里的主分支的负责人,而且还有很多数据,20亿个文件,30太字节。Andrew Cholakian:这太棒了。
[...]
Tim Pease:推送索引源代码,这是一个自我修复的过程 我们有一个存储库文档,它跟踪最后一个索引提交。如果我们错过了,恰好错过了三次提交,那些工作失败,下一次提交,我们仍然在查看我们索引的上一次提交与我们通过这次新推送看到的提交之间的差异。
您执行git diff
并获得已更新,删除或添加的所有文件。你可以说,“好的,我们需要删除这些文件。我们需要添加这些文件,以及所有这些。“它是自我修复的,这是我们采用几乎所有架构的方法。
所有意味着所有 所有分支所有回购将使用该方法编入索引。
目前还没有全局提交邮件搜索功能
并且Tim Pease himself confirms 提交邮件未编入索引。
请注意,获取本地克隆的自己的弹性搜索本地索引并非不可能:请参阅" Searching a git repository with ElasticSearch"
但对于特定的回购,最容易克隆它并执行:
git log --all --grep='my search'
(更多选项在" How to search a Git repository by commit message?")
答案 8 :(得分:7)
由于这已从Github中删除,我一直在Linux上使用gitk
来执行此操作。
从终端转到您的存储库并输入gitk
在gui的中间,theres是一个搜索框。它提供了很多过滤器选择:
范围 - 包含,触摸路径,添加/删除字符串,更改行匹配
匹配类型 - 精确/ IgnCase / Regexp
搜索字段 - 所有字段/标题/评论/提交者
答案 9 :(得分:6)
答案 10 :(得分:4)
如果您正在使用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/
替换为您的repo的实际Github URL,将脚本保存在某处(例如githubsearch.sh
,使其可执行(chmod +x githubsearch.sh
),然后将以下别名添加到您的~/.bashrc
档案:
alias githubsearch='/path/to/githubsearch.sh'
然后,从你的git repo的任何地方,只需在终端上执行此操作:
githubsearch "what you want to search for"
任何符合您的(不区分大小写)搜索字词的提交都会在浏览器中打开相应的GitHub页面。 (请注意,如果您的搜索字词出现在数百次提交中,这可能会使您的浏览器崩溃并暂时占用您PC的CPU。)
我只在Ubuntu上测试了这个,并且对shell脚本的了解不足以了解这是否适用于其他基于Unix的操作系统 - 特别是我不知道我在这里使用的是否是特定于Bash的。随意评论或编辑以添加兼容性信息。
答案 11 :(得分:0)
答案 12 :(得分:0)
答案 13 :(得分:0)
结合其他答案,在 Github 上使用高级搜索似乎是最简单的。它基本上是一个搜索字符串构建器。 https://github.com/search/advanced