在Github项目内搜索代码

有一种方法来grep的东西在一个Github项目的代码?

我可以拉源和grep它在本地,但我想知道它是否可能通过网络界面或第三方替代方案。

想法吗?

231770 次浏览

2021年12月更新:搜索有再次改进,搜索精确字符串,支持子字符串匹配和特殊字符,或regexp。

regex

但仅适用于<强> cs.github.com < / >强,且仍处于测试阶段(适用于等待列表)


更新2013年1月:一个全新搜索已经到来!< / >,基于elasticsearch.org:

在ruby repo中对stat的搜索将被表示为stat repo:ruby/ruby,现在将只工作__abc2 。
(回购名称不区分大小写:test repo:wordpress/wordpress返回与test repo:Wordpress/Wordpress相同)

enter image description here

将:

enter image description here

你还有很多其他搜索的例子,基于在追随者,或在叉,或…


2012年7月更新(旧的Lucene搜索和糟糕的代码索引,结合破碎的GUI,保存在这里存档):

搜索(基于SolrQuerySyntax)现在更加宽松,可怕的&;__abc0 &;当使用默认的搜索选择器"Everything";)

(我想我们都可以比Tim Pease,在他的目标之一改进了所有GitHub属性的搜索体验",和我确实提到了Stack Overflow的问题;))

下面是ruby代码中的grep的一个示例:它将查找回购和用户,但用于我首先要搜索的东西:代码!

GitHub更宽松的搜索结果


前一期(2012年9月=>2012年3月)

你可以使用高级搜索GitHub表单:

  • 在下拉菜单中选择CodeRepositoriesUsers
  • 使用为该搜索类型列出相应的前缀
例如,使用repo:username/repo-name指令将搜索限制在代码存储库。
首字母“Advanced Search"页面包含以下部分:

< >强代码< / >强搜索:

代码搜索将查看GitHub上公开托管的所有代码。你也可以通过:

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

所以如果你选择&;__abc0 &;搜索选择器,然后你的查询grepping在一个repo的文本将工作:

Good Search selector


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

  • 如果你忘记放置正确的搜索选择器(这里“Code"),你会得到一个错误消息:
    李“Invalid search query. Try quoting it." < / >

错误的selector for code filer

  • 错误消息对你没有任何帮助。
    没有&;quoting it"

  • 一旦你得到错误消息,你就不会得到提醒你搜索选择器 ("Repositories", "Users"或“;Language"”)和(右)搜索过滤器(这里是“;repo:")。
    任何进一步的尝试都不会显示这些关联(选择器-过滤器)。只有你在上面看到的错误信息…
    返回这些数组的唯一方法是单击&;Advance Search"图标:< / p >

 GitHub上的高级搜索图标

    <李> < p >“Everything"搜索选择器,这是默认的,实际上是搜索过滤器的所有错误的 !除了“language:"……
    (你可以想象/假设"Everything"会帮助你选择任何搜索选择器实际上与搜索过滤器“__abc1”;,但不是。这太简单了)

  • 你不能通过"Advance Search"场孤独!
    (但是对于&;language:"你可以,即使&;Search Language"是位于“&;Search for"”“类型”一个…)< / p >

错误的搜索选择器


所以,用户的体验通常是这样的:

  • 你点击"Advanced Search",浏览这些部分的过滤器,并注意到一个你想使用的:"repo:"
  • 你进行第一次高级搜索"repo:jruby/jruby stat"但是使用默认搜索选择器"Everything"
    =比;FAIL !(以及显示关联“选择器-过滤器”的数组;李走了) < / >
  • 你注意到&;Search for&;选择器之类的东西,选择第一个选择"(“哒!我想在存储库中搜索…")
    =比;FAIL !李< / >
  • 沮丧,你选择下一个选择器(这里,"Users"),甚至没有看所说的选择器,只是为了再试一次……
    =比;FAIL !李< / >
  • "去他的,GitHub搜索是破碎的!我要走了!
    ...
    (GitHub高级搜索实际上并没有被打破。只有他们的GUI是…)

所以,概括一下,如果你想“grep Github项目代码中的某些东西”,作为OP 本·汉弗莱斯,不要忘记选择“Code"搜索器……

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

enter image description here

然而,令人困惑的是,public存储库似乎无法使用此功能。

谷歌允许您在项目中搜索,但不包括代码:(

site:https://github.com/CreateJS/EaselJS test

虽然@VonC的答案适用于一些存储库,但不幸的是,对于许多存储库,您现在还不能。Github只是没有索引他们(最初由@emddudley评论)。他们的网站上没有说明这一点,但如果你寻求支持,他们会告诉你:

From: Tim Pease
我们已经停止在codesearch索引中添加新推送的代码。代码的数量已经超过了我们当前的搜索索引,我们正在努力转向一个更可扩展的搜索架构。很抱歉给你添麻烦了。我们不知道这个新的搜索索引何时会启动并运行,但当它准备就绪时,我们会发布一篇博客文章(https://github.com/blog)

令人恼火的是,除了缺少结果(也可能是由于错误的查询)之外,没有办法告诉哪些存储库没有被索引。

也没有办法跟踪这个问题,除了等待他们的博客(或在这里看SO)。

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

只需使用SourceGraph.com来代替在GitHub中搜索,或安装其扩展:

我搜索源代码内的Github库与免费Sourcegraph Chrome扩展

我浏览了SourceForge的Chrome扩展文档,并通过阅读一些Github的代码库搜索文档来查看我使用Github的搜索引擎本身搜索目录名称所需的内容

GitHub的文档表示-

octocat in:file match code where "octocat"出现在文件中 内容。< / p >

octocat in:path匹配“;octocat"出现在文件>路径。

octocat in:file,path匹配“;octocat"出现在>文件内容或文件路径。

到这里:https://github.com/search并输入“模式 repo:user_name/ __abc3”。

例如,要在用户fastaifastai回购中搜索cnn_learner,输入如下:

cnn_learner repo:fastai/fastai

就是这样。唯一的烦恼是你需要额外的点击。它会告诉你:

我们找不到任何匹配'cnn_learner的存储库 回购:fastai / fastai ' < / p >

因为默认情况下,它搜索匹配搜索字符串的存储库

所以只要点击左边的“code”它会显示你想要的东西。

或者直接使用如下URL获取代码搜索结果:

https://github.com/search?q=cnn_learner+repo%3Afastai%2Ffastai&type=code

要在存储库中搜索,在repo的根目录中添加URL参数/search?q=search_terms,例如:

https://github.com/bmewburn/vscode-intelephense/search?q=phpstorm

enter image description here

在上面的例子中,它在代码中返回2个结果,在问题中返回160个结果。

有一个非常好的项目叫做github1s @ https://github.com/conwnet/github1s

基本上,你将任何repo https://github.com/microsoft/vscode的url更改为https://github1s.com/microsoft/vscode,然后你可以使用编辑器中内置的搜索函数,在存储库中搜索任何东西。

在搜索框中使用你的搜索词和in:file

“搜索”将创建一个下拉框,询问您想要搜索的位置。

enter image description here

只需访问该回购的主页,然后在左上方的搜索框中输入您的搜索词。

第一个建议的结果将被标记为“在这个存储库中”。点击它,或者直接按回车键。

enter image description here

enter image description here