如何在GitHub上搜索以获取精确的字符串匹配,包括特殊字符。

460

我可以使用引号如 "system <<-" 在Google中搜索确切的匹配。

那么我如何在GitHub上做同样的事情呢?


1
@Machavity,感谢您的编辑!当我提出这个问题时,我的英语还非常差。但现在我的英语好多了。回顾当时我所问的问题,我感到很惭愧...感谢您让它变得更好! - Just a learner
2
现在你已经很长时间无法在Google上搜索到精确匹配的结果了... - sdbbs
1
@sdbbs 噢,我刚试了一下,是真的!这是什么时候开始的?太糟糕了。 - Just a learner
@Justalearner,你的更新过期了吗?当我尝试访问新的GitHub代码搜索页面https://cs.github.com/时,我被重定向到github.com。 - Kevin LeStarge
1
我说的对吗?现在已经是2023年了,我们可以让人工智能生成完全功能的代码,但我们仍然无法在GitHub上搜索到精确匹配的内容? - Ignat Sachivko
显示剩余3条评论
12个回答

249
你以前是不能的(在2022年之前)。官方的GitHub 搜索规则如下:
由于搜索代码的复杂性,对搜索操作有一些限制:
- 只考虑默认分支。在大多数情况下,这将是主分支。 - 只能搜索小于384 KB的文件。 - 只能搜索文件数量少于500,000个的仓库。 - 在搜索源代码时,必须始终包含至少一个搜索词。例如,搜索“language:go”是无效的,而搜索“amazing language:go”是有效的。 - 最多可以显示同一文件中的两个片段作为搜索结果,但文件内可能还有更多结果。 - 以下通配符字符不能作为搜索查询的一部分:
. , : ; / \ ` ' " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ]
搜索将简单地忽略这些符号。
更新:GitHub现在支持字面字符串,但您也可以尝试下面更强大的方法。

试用 Sourcegraph

如果需要支持正则表达式的复杂搜索,请尝试 Sourcegraph

enter image description here


克隆并使用 git-grep

Git 支持使用 git-grep 命令在源代码中进行搜索。只需克隆一个代码库,并在该文件夹中使用该命令即可:

git grep "text-to-search"

替代方案:

我建议你尝试ripgrep工具,它快速而简单。类似于git-grep,但外观更好:

rg "text-to-search"

而且您可以使用标准的grep命令在文件中搜索任何文本:

grep -r "text-to-search" /repository

552
太糟糕了,他们为什么不修复它?理想情况下,我应该能够使用正则表达式进行搜索。我去哪里抗议这个? :) - Daniel Darabos
19
我向支持部门提出了问题,他们回答说:“在GitHub搜索中转义特殊字符的能力是一个经常被请求的功能。虽然我不能做出任何承诺,但我会在我们的内部功能请求列表上+1这个想法。” 我认为这取决于索引大小:GitHub包含太多代码。 - DenisKolodin
13
我认为这是一个索引挑战。 让逐字双引号搜索正常工作的难度可能比现有实现高一个数量级。 让正则表达式搜索正常工作可能会更难,甚至可能会引发麻烦。 - Matt Kocaj
49
含有点号的字面字符串,例如ldap.mycomp.com怎么办?!?! 我不需要使用正则表达式,我只想进行字面字符串搜索。 - Jason
14
现在是2022年,你如何使用字面搜索字符串? - Didier A.
显示剩余7条评论

68

您可以直接使用谷歌。

这个怎么样?

"your_string_to_search" site::https://github.com
"your_string_to_search" site::https://gist.github.com

176
那不是假设Google可以访问你的代码库吗?对于私有代码库来说,情况不应该是这样的。 - Joel B
2
它在仓库内工作,例如:"alias agi=" site::https://github.com/robbyrussell/oh-my-zsh - sites
1
@juanpastas,你能给出一个搜索字符串的完整示例吗? - mrgloom
30
当Google仍然支持使用引号来强制进行精确搜索时,这种做法更有意义。 - Kylotan
2
@FullMetalFist 看起来是的,例如 "你要搜索的字符串" site:https://github.com filetype:cpp - mrgloom
显示剩余5条评论

33

今天我试图在Github上的任何存储库中查找名称为logback.xml的文件中的filter class的精确匹配。我使用了以下查询,成功找到了。

"filter class" in:file filename:logback.xml

为了使用带引号的精确匹配,您需要在搜索后面添加“in:file”修饰符。这些匹配并不完全准确,“class”单词必须跟在“filter”单词后面,但是似乎两个单词之间可以有0个或多个空格或符号字符。


36
使用或不使用 in:file 搜索时,我在行为上没有看到任何区别。 - Daniel Darabos
2
我也不知道,但是用引号括起来的“foo bar”可以搜索相邻的单词这一事实对我来说非常有用。 - Beni Cherniavsky-Paskin
1
谢谢,这比没有好多了。请注意文件名可能是一个正则表达式,例如 in:file filename:*.js - Maksim Nesterenko

23
  1. 在GitHub上创建一个仓库,例如microsoft/fluentui
  2. 按下点号“.”打开VS Code的Web界面
  3. 转到左侧面板中的搜索
  4. 通过搜索栏下方的提示启用索引
  5. 耶!精确搜索可用了

更新:截至2022年11月,以上解决方案仅适用于您已登录GitHub的情况。

您可以在此链接上启用新搜索体验的预览: https://github.com/features/code-search-code-view/signup

然后只需使用引号进行完全匹配:"system <<-"


1
vscode?你能解释一下它与github的关系吗? - Sisir
4
当您在GitHub.com上打开存储库并按下句点“.”时,它会在您的浏览器中启动VS Code,并打开存储库。 - Draex_
1
谢谢,因为cs.github.com让你注册白名单,所以这拯救了我的一天。 - Encyklopedie
1
那是本地“repo”搜索,而不是“GitHub搜索”。一个是基于“git”的SaaS,另一个是本地“git”存储库。 - Ari
1
@Ari 这是一个“repo”搜索,而不是本地“repo”搜索。关键在于您无需在搜索之前下载“repo”。 - Draex_
显示剩余4条评论

13
你可以:自2021年12月起,从cs.github.com进行的搜索可以包含特殊字符。

改进GitHub代码搜索

(来自Pavel Avgustinov)

搜索一个确切的字符串,支持子字符串匹配和特殊字符,或使用正则表达式(用/分隔符括起来)。

因此,在这个新的搜索网站上,"system <<-"应该可以工作。


6
它告诉我要注册技术预览,我已成功注册,但需要多少天才能接受我开始使用该功能?Github的默认搜索很糟糕且没用。最后,真不敢相信他们这么做了。 - Taha Sami
4
我同意,那里似乎有某种等候名单... - VonC
3
两年过去了,仍处于技术预览阶段。 :-( - Emile Cormier
1
@EmileCormier 是的。最新消息:https://github.blog/2021-12-15-a-brief-history-of-code-search-at-github/ - VonC

11

补充@mrgloom的回答,如果你想在Github中查找特定编程语言的代码,可以在Google搜索栏中执行以下操作:

  • 使用“intext:”搜索运算符来说明您要查找的特定字符串
  • 使用“ext:”运算符添加您感兴趣的编程语言(例如“ext:py”,“ext:R”,“ext:rb”等)
  • 使用mrgloom提到的“site:”运算符在Github中搜索所有公共存储库。

示例:

intext:"%% 2 == 0" ext:R site:github.com

Google Results from the example


2
intext:".set(" ext:JS site:github.com" 没有起作用 :/ - Aditya M P
1
你说得对!我不明白为什么……我尝试了 intext:"set(" inurl:.js site:github.com,有点用,但并不完全正确。 - silviaegt
3
我阅读了相关内容,显然谷歌搜索会忽略括号。然而,我不明白为什么"ext"运算符不起作用。根据这个,它是"filetype"的一个未记录的别名,但不确定为什么"js"不被视为其中之一。 - silviaegt

4
截至2021年11月2日,可以通过在搜索字符串周围加上引号来实现。
没有引号: 未使用引号在 GitHub 上搜索 chaos monkey 有引号: 使用字符串在 GitHub 上搜索 chaos monkey 虽然现在可以搜索精确的字符串,但该功能尚不支持非字母数字字符的搜索。示例:

Searching chaos monkey on GitHub with question mark in quoted string


3
好的说明。我很惊讶(不是好的那种)github 的搜索功能有多么糟糕! - cb4
2
我无法复制这种行为。我搜索了一个带有点的字符串,比如版本号,在我的代码库中得到了成千上万的结果。 - cgseller
@cgseller 一个点是这个回答所称的特殊字符的一个例子。为了避免产生误解,我已经更新了回答,将其描述为“非字母数字字符”。 - Jacob Archambault

3

2
您现在可以在GitHub中使用正斜杠而不是引号进行正则表达式搜索,因此您可以匹配精确字符串和模式。尝试搜索/system <<-/以获取精确匹配,或者/system[\s]*<<-/以获取中间任意数量的空白字符,例如! GitHub参考:理解GitHub代码搜索语法 > 使用正则表达式

1
如果你的搜索词是一个文件名或其他包含标点符号的子字符串,那么获取GitHub代码搜索返回该子字符串实例的部分解决方法是:(1)用空格替换搜索词中的标点符号,(2)将搜索词用引号括起来。例如,不要使用搜索词:repo:my_repo my_image_asset_1.svg,而应该使用搜索词:repo:my_repo "my image asset 1 svg"。这可能并不是所有情况下的完美解决方案;我想它也可能匹配像my-image-asset-1.svg这样的文件名。但根据你的用例,它可能已经足够好了?

1
谢谢!这可能是一个笨拙的解决方法,但是在企业级 GitHub 上搜索大量存储库时是唯一可行的解决方案。 - Heinrich supports Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接