在 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:
从下拉列表中选择Code
、Repositories
或Users
,然后
使用为该搜索类型列出的相应前缀。
例如,使用 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,点击书签,bam:in-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”。
例如,要在用户fastai
的fastai
存储库中搜索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 项目中搜索代码的主要内容,如果未能解决你的问题,请参考以下文章