在 Github 项目中搜索代码

Posted

技术标签:

【中文标题】在 Github 项目中搜索代码【英文标题】:Search code inside a Github project 【发布时间】:2011-04-06 16:25:35 【问题描述】:

有没有办法在 Github 项目的代码中查找某些内容?

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

想法?

【问题讨论】:

也结帐code.ohloh.net :) 对于 Java/Scala 存储库,请尝试 Codota Semantic Code Search 在github.com/isaacs/github/issues/1495打开了一个功能请求 【参考方案1】:

2021 年 12 月更新:搜索有 been improved again,可搜索精确字符串,支持子字符串匹配和特殊字符或正则表达式。

但仅限于cs.github.com,并且仍处于测试阶段(适用候补名单)


2013 年 1 月更新:brand new search has arrived!,基于 elasticsearch.org

在 ruby​​ 存储库中搜索 stat 将表示为 stat repo:ruby/ruby,现在可以正常工作TM。 (repo 名称不区分大小写:test repo:wordpress/wordpress 返回与test repo:Wordpress/Wordpress 相同)

将给予:

您还有许多其他搜索示例,基于on followers,或on forks,或...


2012 年 7 月更新(过去的 Lucene 搜索和糟糕的代码索引,加上损坏的 GUI,留在这里存档):

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

(我想我们都可以比 Tim Pease,他的目标之一是 "hacking on improved search experiences for all GitHub properties" 和当时的I did mention this Stack Overflow question ;)

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


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

您可以使用advanced search GitHub form:

从下拉列表中选择CodeRepositoriesUsers,然后 使用为该搜索类型列出的相应前缀

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

代码搜索:

代码搜索将查看 GitHub 上公开托管的所有代码。您也可以按以下方式过滤:

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

因此,如果您选择“Code”搜索选择器,那么您对 ​​repo 中文本的 grepping 查询将起作用:


来自 GitHub 的 难以置信 无用是:

如果您忘记输入正确的搜索选择器(此处为“Code”),您将收到一条错误消息: "Invalid search query. Try quoting it."

错误消息对您没有任何帮助。 再多的“quoting it”也不会让你摆脱这个错误。

一旦您收到该错误消息,您就不会看到提醒您搜索选择器(“Repositories”、“Users”或“@987654367”之间的正确关联的部分@") 和(右)搜索过滤器(此处为“repo:”)。 您所做的任何进一步尝试都不会显示这些关联(选择器-过滤器)。只有您在上面看到的错误消息... 取回这些数组的唯一方法是单击“Advance Search”图标:

默认的“Everything”搜索选择器实际上是所有搜索过滤器的错误!除了“language:”... (您可以想象/假设“Everything”将帮助您选择任何搜索选择器实际上适用于搜索过滤器“repo:”,但不是。这太容易了)

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


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

您单击“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 没有一个有效 @TomH:乍一看,这可能是 GitHub 方面的一个错误,正如 superuser.com/a/179900/141 评论的那样 @DannyStaple 好吧,如果您查看github.com/blog/1116-tim-pease-is-a-githubber 中描述的任务,他们似乎意识到了这个问题:“Tim 很可能是 [... ] 改进所有 GitHub 属性的搜索体验”。确保回复他们的 GitHub 推文 (twitter.com/#!/github/status/197070106768048128),就像我一样 (twitter.com/#!/VonC_/status/197565733830541313) FWIW 我联系了 GitHub,因为在将搜索限制在我的存储库时,我没有得到任何搜索结果。 Tim Pease 回应说,他们在回购索引的数量上遇到了困难,因此他们一直在迁移到分片索引服务器。没有关于何时迁移所有存储库的 ETA。 我刚刚使用了这个答案的建议,它也对我有用,但我有一个警告要补充。即使 GitHib 以不同的方式在其他任何地方列出它,repo 名称也应始终为小写。例如,(在设置代码下拉列表等之后,如上所述)尝试使用相同的搜索:repo:wordpress/wordpress vs repo:WordPress/WordPress ...只有第一个会产生结果。【参考方案2】:

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

令人费解的是,不过,公共存储库似乎无法使用此功能。

【讨论】:

不知道这是不是一个低级的商业举动,让人们升级到付费版本?听起来不像 github,但仍然。 @Sylvain 它不认为这样做是为了鼓励升级,因为即使升级后,您也不会获得公共存储库的搜索字段。相反,我认为主搜索使用不包含私有存储库的索引,因此您在为私有存储库付费时不会失去功能,他们必须添加另一种方式来仅搜索该私有存储库,因此额外的文本字段。 想象一下他们在每个 repo 中为每一行代码都有一个搜索索引的开销!疯狂的!这就是为什么他们只为私人回购做这件事.. 搜索现在在标题中,与全局搜索相同。【参考方案3】:

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

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

在上面的例子中,它在 Code 中返回 2 个结果,在 Issues 中返回 160 个结果。

【讨论】:

这太酷了!你知道如何让它在主仓库的分支上工作吗?当我遵循您提供的格式时,它对我不起作用。 截至目前:只有默认分支被索引用于代码搜索。见docs.github.com/en/free-pro-team@latest/github/…【参考方案4】:

更新

由于 XHR 问题和 API 更改,下面的小书签 hack 已损坏。

谢天谢地,Github 现在有 "A Whole New Code Search",它可以很好地完成这项工作。


查看此巫术:Github code search userscript。

按照那里的说明进行操作,或者如果您讨厌让浏览器膨胀 脚本和扩展,使用我的用户脚本的书签包:

javascript:(function()var s='https://raw.githubusercontent.com/skratchdot/github-enhancement-suite/master/build/github-enhancement-suite.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 repo,点击书签,bamin-page, ajaxified code 搜索

CAVEAT Github 必须先索引一个 repo,然后才能搜索它。

阿布拉卡达布拉...

这是来自带注释的 ECMAScript 5.1 规范的示例搜索 仓库:

【讨论】:

当我使用插件 (Chrome) 时,它在 scratchdot/github-code-search 存储库中运行良好,但在任何其他存储库中都无法正常运行。 它应该可以在任何 repo 的主页中使用。也许您正在尝试从不同的页面?我在帖子的不同存储库中发布了示例搜索的屏幕截图。 啊哈!我实际上发现了这些搜索可能失败的原因:回购必须等待轮到索引。鉴于有数以万计的活动存储库,我怀疑这需要一些时间。 @user456584 这对我来说是个新闻。您可能也想让Google 和Mozilla 知道。 我知道为什么插件不工作了,因为 repo 名称需要小写。 (请参阅我对上面 VonC 回答的评论)。我已经在 GitHub 上提交了补丁,希望原作者能看到。 github.com/skratchdot/github-code-search.user.js/pull/5【参考方案5】:

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

发件人:蒂姆·皮斯 我们已停止将新推送的代码添加到我们的代码搜索索引中。代码量已经超出了我们当前的搜索索引,我们正在努力转向更具可扩展性的搜索架构。我很抱歉给您带来不便。我们无法估计这个新的搜索索引何时启动并运行,但当它准备就绪时,将会发布一篇博文 (https://github.com/blog)。

令人烦恼的是,除了缺少结果(也可能来自错误的查询)之外,没有办法知道哪些存储库没有被索引。

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

发件人:蒂姆·皮斯 恐怕我们的问题跟踪器是内部的,但我们会在新的搜索索引启动并运行后立即通知您。

【讨论】:

他们至少应该提到一些搜索结果可能会被省略。当我重构代码并搜索存在但 GitHub 未提及的代码时,这完全糟透了。【参考方案6】:

谷歌允许你在项目中搜索,但不能在代码中搜索:(

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

【讨论】:

【参考方案7】:

转到此处:https://github.com/search 并输入“pattern repo:user_name/repo_name”。

例如,要在用户fastaifastai 存储库中搜索cnn_learner,请输入:

cnn_learner repo:fastai/fastai

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

我们找不到任何与“cnn_learner”匹配的存储库 回购:fastai/fastai'

因为默认情况下它会搜索与该搜索字符串匹配的 repositories...

所以只要点击左边的“代码”,它就会显示你想要的。

或者直接用这样的网址获取代码搜索结果:

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

【讨论】:

【参考方案8】:

我使用免费的Sourcegraph Chrome Extension 在 Github 存储库中搜索源代码 ...但我Downloaded Chrome First,我知道其他浏览器支持它,例如 - 并且可能只是 - Firefox。

我浏览了SourceForge's Chrome Extension Docs,然后通过阅读Github's Codebase Searching Doc 中的一些内容,了解了使用 Github 搜索引擎本身搜索目录名称所需的内容

【讨论】:

【参考方案9】:

GitHub documentation 说-

octocat in:file 匹配文件中出现“octocat”的代码 内容。

【讨论】:

以上是关于在 Github 项目中搜索代码的主要内容,如果未能解决你的问题,请参考以下文章

github 中怎么下载别人的代码

你真的会高效的在GitHub搜索开源项目吗?

Github搜索技巧-如何使用github找到自己感兴趣的项目

GitHub 基础搜索技巧

如何在github上找到需要的项目

在GitHub上高效的搜索开源项目