阅读 703

身为程序员 你真的会使用github搜索吗?

"Madison龙少"

身为程序员 你真的会使用github搜索吗?

前言

github作为全球最大的开源软件项目托管平台,我相信不少程序员都在使用。但是你真的会使用github的搜索功能吗?

 我们经常会在GitHub上搜索代码、项目、用户或查找相关主题,最简单常用的方法是在GitHub主页搜索框中直接输入相关信息进行查找,比如我们要搜索spring-boot相关项目如下图所示:

"Madison龙少"

那如何能精准定位到我们需要找的代码、项目、用户或查找相关主题呢?本文就详细来讲一下在GitHub上如何精准搜索的巧妙技巧

搜索语法篇

常用词含义

  • watch:会持续收到该项目的动态
  • fork:复制某个仓库到自己的Github仓库中
  • star:可以理解为点赞
  • clone:将项目下载至本地
  • follow:关注你感兴趣的作者,会收到他们的动态

搜索 GitHub 时,可以构建匹配特定数字和单词的查询。

查询大于或小于另一个值的值

可以使用 >、>=、< 和 <= 搜索大于、大于等于、小于以及小于等于另一个值的值。

查询示例
>nspring-boot stars:>2000 匹配含有 "spring-boot" 字样、星标超过 1000 个的仓库。
>=nspring-boot topics:>=5 匹配含有 "spring-boot" 字样、有 5 个或更多主题的仓库。
<nspring-boot size:<10000 匹配小于 10 KB 的文件中含有 "spring-boot" 字样的代码。
<=nspring-boot stars:<=50 匹配含有 "spring-boot" 字样、星标不超过 50 个的仓库。

"Madison龙少"

"Madison龙少"

还可以使用范围查询搜索大于等于或小于等于另一个值的值。

查询示例
n..*spring-boot stars:5000..* 等同于 stars:>=5000 并匹配含有 "spring-boot" 字样、有 5000 个或更多星号的仓库。
*..nspring-boot stars:*..20 等同于 stars:<=20 并匹配含有 "spring-boot" 字样、有不超过 20 个星号的仓库。

03.gif

查询范围之间的值

可以使用范围语法 n..n 搜索范围内的值,其中第一个数字 n 是最低值,而第二个是最高值。

查询示例
n..nspring-boot stars:4000..5000 匹配含有 "spring-boot" 字样、有4000到5000个星号的仓库

"Madison龙少"

查询日期

可以通过使用 >、>=、<、<= 和范围查询搜索早于或晚于另一个日期,或者位于日期范围内的日期。 日期格式必须遵循 ISO8601标准,即 YYYY-MM-DD(年-月-日)。

查询示例
>YYYY-MM-DDspring-boot created:>2016-04-29 匹配含有 "spring-boot" 字样、在 2016 年 4 月 29 日之后创建的议题。
>=YYYY-MM-DDspring-boot created:>=2017-04-01 匹配含有 "spring-boot" 字样、在 2017 年 4 月 1 日或之后创建的议题。
<YYYY-MM-DDspring-boot pushed:<2012-07-05 匹配在 2012 年 7 月 5 日之前推送的仓库中含有 "spring-boot" 字样的代码。
<=YYYY-MM-DDspring-boot created:<=2012-07-04 匹配含有 "spring-boot" 字样、在 2012 年 7 月 4 日或之前创建的议题。
YYYY-MM-DD..YYYY-MM-DDspring-boot pushed:2016-04-30..2016-07-04 匹配含有 "spring-boot" 字样、在 2016 年 4 月末到 7 月之间推送的仓库
YYYY-MM-DD..*spring-boot created:2012-04-30..* 匹配在 2012 年 4 月 30 日之后创建、含有 "spring-boot" 字样的议题。
*..YYYY-MM-DDspring-boot created:*..2012-07-04 匹配在 2012 年 7 月 4 日之前创建、含有 "spring-boot" 字样的议题。

也可以在日期后添加可选的时间信息 THH:MM:SS+00:00,以便按小时、分钟和秒进行搜索。 这是 T,随后是 HH:MM:SS(时-分-秒)和 UTC 偏移 (+00:00)。

查询示例
YYYY-MM-DDTHH:MM:SS+00:00spring-boot created:2017-01-01T01:00:00+07:00..2017-03-01T15:30:15+07:00 匹配在 2017 年 1 月 1 日凌晨 1 点(UTC 偏移为 07:00)与 2017 年 3 月 1 日下午 3 点(UTC 偏移为 07:00)之间创建的议题。 UTC 偏移量 07:00,2017 年 3 月 1 日下午 3 点。 UTC 偏移量 07:00。
YYYY-MM-DDTHH:MM:SSZspring-boot created:2016-03-21T14:11:00Z..2016-04-07T20:45:00Z 匹配在 2016 年 3 月 21 日下午 2:11 与 2016 年 4 月 7 日晚上 8:45 之间创建的议题。

这里就不演示了,跟上面是一样的,自行测试。

排除特定结果

可以使用 NOT 语法排除包含特定字词的结果。 NOT 运算符只能用于字符串关键词不适用于数字或日期

查询示例
NOThello NOT world 匹配含有 "hello" 字样但不含有 "world" 字样的仓库。

"Madison龙少"

缩小搜索结果范围的另一种途径是排除特定的子集。 您可以为任何搜索限定符添加 - 前缀,以排除该限定符匹配的所有结果。

查询示例
-QUALIFIERspring-boot stars:>1000 -language:kotlin 匹配含有 "spring-boot" 字样、有超过 1000 个星号但并非以 kotlin 编写的仓库。
mentions:defunkt -org:github 匹配提及 @defunkt 且不在 GitHub 组织仓库中的议题

"Madison龙少"

对带有空格的查询使用引号

如果搜索含有空格的查询,您需要用引号将其括起来

  • spring-boot NOT "hello world" 匹配含有 "spring-boot" 字样但不含有 "hello world" 字样的仓库。
  • build label:"bug fix" 匹配具有标签 "bug fix"、含有 "build" 字样的议题。

某些非字母数字符号(例如空格)会从引号内的代码搜索查询中删除,因此结果可能出乎意料。

使用用户名的查询

如果搜索查询包含需要用户名的限定符,例如 useractorassignee,您可以使用任何 GitHub 用户名指定特定人员,或使用 @me 指定当前用户。

查询示例
QUALIFIER:USERNAMEauthor:nat 匹配 @nat 创作的提交。
QUALIFIER:@meis:issue assignee:@me 匹配已分配给结果查看者的议题

@me 只能与限定符一起使用,而不能用作搜索词,例如 @me main.workflow。

高级检索-搜索仓库

按仓库名称、说明或自述文件内容搜索

通过 in 限定符,您可以将搜索限制为仓库名称仓库说明自述文件内容或这些的任意组合。 如果省略此限定符,则只搜索仓库名称和说明

限定符示例
in:nameseckill in:name 匹配仓库名称中含有 "seckill" 的仓库。
in:descriptionseckill in:name,description 匹配仓库名称或说明中含有 "seckill" 的仓库
in:readmeseckill in:readme 匹配仓库自述文件中提及 "seckill" 的仓库。
repo:owner/namerepo:codingXiaxw/seckill 匹配特定仓库名称。

"Madison龙少"

在用户或组织的仓库内搜索

要在特定用户组织拥有的所有仓库中搜索,您可以使用 userorg 限定符。

限定符示例
user:USERNAMEuser:defunkt forks:>100 匹配来自 @defunkt、拥有超过 100 复刻的仓库。
org:ORGNAMEorg:github 匹配来自 GitHub 的仓库。

按仓库大小搜索

size 限定符使用大于、小于和范围限定符查找匹配特定大小(以千字节为单位)的仓库。

限定符示例
size:nsize:1000 匹配恰好为 1 MB 的仓库。
size:>=30000 匹配至少为 30 MB 的仓库。
size:<50 匹配小于 50 KB 的仓库。
size:50..120 匹配介于 50 KB 与 120 KB 之间的仓库。

按关注者数量搜索

可以使用 followers 限定符以及大于、小于和范围限定符,基于关注仓库用户数量过滤仓

库。

限定符示例
followers:nspring-boot followers:>=10000匹配有 10000 或更多关注者提及文字 "spring-boot" 的仓库。
spring followers:1..10 匹配拥有 1 到 10 个关注者并且提及 "spring" 一词的的仓库。

"Madison龙少"

按复刻数量搜索

forks 限定符使用大于、小于和范围限定符指定仓库应具有的复刻数量

限定符示例
forks:nforks:5 匹配只有 5 个复刻的仓库。
forks:>=205 匹配具有至少 205 个复刻的仓库。
forks:<90 匹配具有少于 90 个复刻的仓库。
forks:10..20 匹配具有 10 到 20 个复刻的仓库。

"Madison龙少"

按星号数量搜索

可以使用大于、小于和范围限定符,基于仓库的星标数量来搜索仓库。

限定符示例
stars:nstars:500 匹配恰好具有 500 个星号的仓库。
stars:10..20 匹配具有 10 到 20 个星号、小于 1000 KB 的仓库。
stars:>=500 fork:true language:php 匹配具有至少 500 个星号,包括复刻的星号(以 PHP 编写)的仓库。

"Madison龙少"

按仓库创建或上次更新时间搜索

 可以基于创建时间上次更新时间过滤仓库。 对于仓库创建,您可以使用 created 限定符;要了解仓库上次更新的时间,您要使用 pushed 限定符。 pushed 限定符将返回仓库列表,按仓库中任意分支上最近进行的提交排序。

 两者均采用日期作为参数日期格式必须遵循 ISO8601标准,即 YYYY-MM-DD(年-月-日)。 您也可以在日期后添加可选的时间信息 THH:MM:SS+00:00,以便按小时分钟进行搜索。 这是 T,随后是 HH:MM:SS(时-分-秒)和 UTC 偏移 (+00:00)。

限定符示例
created:YYYY-MM-DDwebos created:<2011-01-01 匹配具有 "webos" 字样、在 2011 年之前创建的仓库。
pushed:YYYY-MM-DDcss pushed:>2013-02-01 匹配具有 "css" 字样、在 2013 年 1 月之后收到推送的仓库。
case pushed:>=2013-03-06 fork:only 匹配具有 "case" 字样、在 2013 年 3 月 6 日或之后收到推送并且作为复刻的仓库。

按语言搜索

可以根据仓库中代码的语言搜索仓库。

限定符示例
language:LANGUAGErails language:javascript 匹配具有 "rails" 字样、以 JavaScript 编写的仓库。

"Madison龙少"

按主题搜索

可以找到按特定主题分类的所有仓库。

限定符示例
topic:TOPICtopic:jekyll匹配已归类为 "jekyll" 主题的仓库。

按主题数量搜索

可以使用 topics 限定符以及大于、小于和范围限定符,根据应用于仓库的主题数量来搜索仓库。

限定符示例
topics:ntopics:5 匹配具有五个主题的仓库。
topics:>3 匹配超过三个主题的仓库。

按许可搜索

可以根据仓库中许可的类型搜索仓库。 您必须使用许可关键字,按特定许可或许可系列来过滤仓库。

限定符示例
license:LICENSE_KEYWORDlicense:apache-2.0 匹配根据 Apache License 2.0 授权的仓库

按仓库可见性搜索

可以根据仓库的可见性过滤搜索。

限定符示例
is:publicis:public org:github 匹配 GitHub 拥有的公共仓库。
is:internalis:internal test 匹配您可以访问并且包含单词 "test" 的内部仓库。
is:privateis:private pages 匹配您可以访问并且包含单词 "pages" 的私有仓库。

基于仓库是否为镜像搜索

可以根据仓库是否为镜像以及托管于其他位置托管来搜索仓库。

限定符示例
mirror:truemirror:true GNOME 匹配是镜像且包含 "GNOME" 字样的仓库。
mirror:falsemirror:false GNOME 匹配并非镜像且包含 "GNOME" 字样的仓库。

基于仓库是否已存档搜索

可以基于仓库是否已存档来搜索仓库。

限定符示例
archived:truearchived:true GNOME 匹配已存档且包含 "GNOME" 字样的仓库。
archived:falsearchived:false GNOME 匹配未存档且包含 "GNOME" 字样的仓库。

基于具有 good first issue 或 help wanted 标签的议题数量搜索

可以使用限定符 help-wanted-issues:>ngood-first-issues:>n 搜索具有最少数量标签help-wantedgood-first-issue议题的仓库。

限定符示例
good-first-issues:>ngood-first-issues:>2 javascript 匹配具有超过两个标签为 good-first-issue 的议题且包含 "javascript" 字样的仓库。
help-wanted-issues:>nhelp-wanted-issues:>4 react 匹配具有超过四个标签为 help-wanted 的议题且包含 "React" 字样的仓库。

高级检索-搜索用户

按用户拥有的仓库数量搜索

可以使用 repos 限定符以及大于、小于和范围限定符基于用户拥有的仓库数量过滤用户。

限定符示例
repos:nrepos:>9000 匹配其仓库数超过 9,000 的用户。
bert repos:10..30 匹配拥有 10 到 30 个仓库、其用户名或真实姓名含有 "bert" 字样的用户。

"Madison龙少"

按仓库语言搜索

使用 language 限定符,您可以基于用户所拥有仓库的语言搜索用户。

限定符示例
language:LANGUAGElocation:beijing language:java 匹配恰好有一个仓库位于北京的java语言用户。

按位置搜索

可以按其个人资料中指示的位置搜索用户。

限定符示例
location:LOCATIONlocation:beijing language:java 匹配恰好有一个仓库位于北京的java语言用户。

搜索某个地区内,某种语言的大佬

location:beijing language:java

"Madison龙少"

按关注者数量搜索

可以使用 followers 限定符以及大于、小于和范围限定符基于用户拥有的关注者数量过滤用户。

限定符示例
followers:nfollowers:>=1000 匹配有 1,000 个或更多关注者的用户。
sparkle followers:1..10 匹配具有 1 到 10 个关注者、其名称中含有 "sparkle" 字样的用户。

"Madison龙少"

高级检索-扩展检索

awesome加强搜索

  • 公式:awesome 关键字:awesome系列,一般用来收集学习、工具、书籍类相关的项目
  • 搜索优秀的redis相关的项目,包括框架教程等 awesome redis

16.gif

高亮显示某行代码

  • 一行:地址后面紧跟 #L10

github.com/redis/redis…

  • 多行:地址后面紧跟 #Lx - #Ln

github.com/redis/redis…

"Madison龙少"

项目内搜索

使用英文字母 t ,开启项目内搜索 项目地址:github.com/redis/redis…t

18.gif

这里我再推荐一个很好用的GitHub chrome插件: Octotree

19.gif

生命不止,学习不息。

GitHub 官方文档

结束语

感谢阅读小生文章。祝大家早日富可敌国,实现财富自由。
写文不易,一定要点赞、评论、收藏哦,感谢感谢感谢!!!

有任何问题可以在微信搜索公众号Madison龙少进行咨询
或者微信扫描下面二维码进行咨询
"Madison龙少"

文章分类
开发工具
文章标签