在Github项目中搜索代码


272

有没有办法在Github项目的代码中进行grep的处理?

我可以提取源代码并在本地grep,但是我想知道是否可以通过Web界面或第三方替代方案。

有想法吗?



对于Java / Scala存储库,请尝试Codota语义代码搜索
drorw 2015年

Answers:


255

2013年1月更新:全新的搜索到来了!,基于elasticsearch.org

在ruby回购中搜索stat将被表示为stat repo:ruby/ruby,并且现在仅适用于TM
(回购名称不区分大小写:test repo:wordpress/wordpress返回与相同test repo:Wordpress/Wordpress

在此处输入图片说明

会给:

在此处输入图片说明

而且您还有许多其他的搜索示例,这些示例基于关注者基于fork或...


2012年7月更新(过去的Lucene搜索和糟糕的代码索引,以及损坏的GUI,在此处存档):

现在,搜索(基于SolrQuerySyntax)更加宽松,Invalid search query. Try quoting it.使用默认搜索选择器“ Everything” 时,令人恐惧的“ ”消失了:)

(我想Tim Pease可以做到所有,Tim Pease的目标之一是“破解所有GitHub属性的改进的搜索体验 ”,而我当时确实提到了这个Stack Overflow问题;))

这是ruby代码中grep的图示:它将查找存储库和用户,但首先查找我想搜索的内容:代码!

GitHub更宽松的搜索结果


前一期的初步答案和插图(2012年9月=> 2012年3月)

您可以使用高级搜索GitHub表单

  • 选择CodeRepositoriesUsers从下拉菜单中选择
  • 使用针对该搜索类型列出相应前缀

例如,使用repo:username/repo-name指令将搜索限制为代码存储库。
初始的“ Advanced Search”页面包括以下部分:

代码搜索:

代码搜索将浏览GitHub上公开托管的所有代码。您还可以按以下条件过滤:

  • 语言 language:
  • 存储库名称(包括用户名) repo:
  • 文件路径 path:

因此,如果您选择“ Code”搜索选择器,则对存储库中的文本进行查询grepping的查询将起作用:

好的搜索选择器


什么是令人难以置信的 无益从GitHub是:

  • 如果您忘记放置正确的搜索选择器(此处为“ Code”),则会收到错误消息:
    Invalid search query. Try quoting it.

代码文件选择器选择错误

  • 错误消息根本无法帮助您。
    任何数量的“ quoting it” 都不会使您摆脱这个错误。

  • 收到该错误消息后,您将不会看到让您想起搜索选择器(“ Repositories”,“ Users”或“ Language”)与(右)搜索过滤器(此处为“ repo:”)之间正确关联的部分。
    您进行的任何进一步尝试都不会显示这些关联(选择器-过滤器)。只有上面看到的错误消息...
    取回这些数组的唯一方法是单击“ Advance Search”图标:

GitHub上的高级搜索图标

  • Everything”搜索选择器(默认设置)实际上是所有搜索过滤器的错误选择!除了“ ...” (您可以想象/假设“ ”将帮助您选择实际上与搜索过滤器一起使用的任何搜索选择器,但是不,这太简单了。)language:
    Everythingrepo:

  • 您不能Advance Search仅通过“ ”字段指定所需的搜索选择器!
    (但您可以使用“ language:”,即使“ Search Language”是紧接在Search for“'type'一个” 下面的另一个组合框...)

搜索选择器错误


因此,用户的体验通常如下:

  • 您单击“ Advanced Search”,浏览过滤器的这些部分,然后注意到要使用的过滤器:“ repo:
  • 您将进行第一个高级搜索“ repo:jruby/jruby stat”,但是使用默认的搜索选择器“ Everything
    => FAIL!(并且显示关联“ Selectors-Filters”的数组消失了
  • 您会注意到“搜索”选择器很重要,请选择第一个选择“ Repositories”(“ Dah!我要在存储库中搜索...”)
    => FAIL
  • 沮丧的情况下,您Users无需选择上述选择器,就选择了下一个选择器(此处为“ ”),只是再尝试一下...
    => FAIL
  • “拧这个,GitHub搜索坏了!我不在这里!”
    ...
    (GitHub高级搜索实际上并未中断。只有它们的GUI才...)

因此,回顾一下,如果您想“复制Github项目代码中的某些内容”(例如OP Ben Humphreys),请不要忘记选择“ Code”搜索选择器...


您确定吗,我repo:"jruby/jruby" stat repo:"jruby" stat jruby: stat没有尝试过任何一种方法
Tom H

@TomH:乍一看,它可能是GitHub上的错误,如superuser.com/a/179900/141
VonC

1
@DannyStaple好吧,如果您看一下github.com/blog/1116-tim-pease-is-a-githubber中描述的任务,他们似乎已经意识到了这个问题:“蒂姆很可能是[...]窃取所有GitHub属性的改进搜索体验”。确保像我一样(twitter.com/#!/VonC_/status/197565733830541313)–
VonC

9
FWIW我联系了GitHub,因为在限制对我的存储库的搜索时我没有得到任何搜索结果。蒂姆·皮斯(Tim Pease)回答说,他们在回购索引的数量方面遇到了困难,因此他们一直在迁移到分片索引服务器。何时迁移所有存储库没有ETA。
M. Dudley

3
我刚刚使用了此答案的建议,它也对我有用,但是我需要补充一点。即使GitHib在其他地方以其他方式列出了回购名称,回购名称也应始终小写。例如,(在如上所述设置Code下拉菜单后,)使用以下命令尝试相同的搜索:repo:wordpress / wordpress与repo:WordPress / WordPress ...只有第一个会产生结果。
ethanpil

22

最近的私人存储库有一个搜索字段,用于搜索该存储库。

在此处输入图片说明

令人困惑的是,该功能似乎不适用于公共存储库。


1
我想知道这是否是使人们升级到付费版本的低商业手段?听起来不像github,但仍然如此。
西尔万

3
@Sylvain它不认为这样做是为了鼓励升级,因为即使升级后,您也不会获得用于公共存储库的搜索字段。相反,我认为主要搜索使用的索引不包含私有存储库,因此在购买私有存储库时您不会失去功能,他们不得不添加另一种方式来仅搜索该私有存储库,因此,文本域。
avernet

2
想象一下,对于每个存储库中的每一行代码都有一个搜索索引的开销!疯!这就是为什么他们只能做私人回购协议..
强尼·诺特

1
搜索现在位于标题中,与全局搜索相同。
Tib

20

更新

由于XHR问题和API更改,以下的书签小程序已被破坏。

幸运的是,Github现在有了“全新代码搜索”,可以出色地完成这项工作。


签出这个伏都Github代码搜索用户脚本

按照那里的指示进行操作,或者,如果您不喜欢使用脚本和扩展名使浏览器膨胀,请使用我的书签用户脚本包:

javascript:(function(){var s='https://github.com/skratchdot/github-code-search.user.js/raw/master/github-code-search.user.js',t='text/javascript',d=document,n=navigator,e;(e=d.createElement('script')).src=s;e.type=t;d.getElementsByTagName('head')[0].appendChild(e)})();doIt('');void('');

将上面的源保存为新书签的URL。浏览到任何Github存储库,单击书签,然后单击bam页内,ajaxified代码搜索

CAVEAT Github必须先索引存储库,然后才能对其进行搜索。

书签之前

胡言乱语...

之后-在最左侧的选项卡之后的第二个菜单栏中:文件,提交,分支...

这是从带注释的ECMAScript 5.1规范存储库中进行的示例搜索:

带注释的ECMAScript 5.1规范存储库中的样本搜索


当我使用插件(Chrome)时,它在scratchdot / github-code-search存储库中运行良好,但在其他任何存储库中均无法正常工作。
forforf 2012年

它应该可以在任何回购的主页上使用。也许您要从其他页面尝试?我在帖子中的其他存储库中发布了示例搜索的屏幕截图。
fny 2012年

啊哈!实际上,我发现了为什么这些搜索可能会失败的原因:存储库必须等待轮到索引。鉴于存在大量的活动存储库,我怀疑这会花费一些时间。
2012年

2
@ user456584对我来说是个新闻。您可能也想让GoogleMozilla知道。
fny12年

2
我弄清楚了为什么插件不起作用,这是因为回购名称必须使用小写字母。(请参阅我对VonC答案的评论)。我已经在GitHub上提交了补丁,希望原作者会看到它。 github.com/skratchdot/github-code-search.user.js/pull/5
ethanpil 2013年

10

虽然@VonC的答案适用于某些存储库,但不幸的是,您现在无法使用许多存储库。Github根本没有索引它们(正如@emddudley最初评论的那样)。他们没有在网站上的任何地方声明这一点,但是如果您需要支持,他们会告诉您:

来自:Tim Pease
我们已停止将新推送的代码添加到我们的代码搜索索引中。代码量已经超过了我们当前的搜索索引,我们正在努力转向更具扩展性的搜索体系结构。对不起,我很抱歉。对于这个新的搜索索引何时启动和运行,我们还没有估计,但是准备就绪时,将发布博客文章(https://github.com/blog)。

令人烦恼的是,除了缺少结果之外,没有其他方法可以告诉未对哪些存储库进行索引(这也可能来自错误的查询)。

除了等待他们写博客(或在此处观看)之外,没有其他方法可以跟踪此问题。

来自:Tim Pease
恐怕我们的问题跟踪器是内部的,但是一旦新的搜索索引启动并运行,我们就会通知您。


他们至少应该提到一些搜索结果可能会被省略。当我重构代码并搜索其中存在但GitHub未提及的代码时,这完全糟透了。
Nicodemuz


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.