很多的小伙伴,经常会有这样的困惑,我看了很多技术的学习文档、书籍、甚至视频,我想动手实践,于是我打开了GitHub,想找个开源项目,进行学习,获取项目实战经验。这个时候很多小伙伴就会面临这样的问题:“我不会搜啊,我该怎么找呀?”,最终只能放弃。

这篇文章教你精准地在GitHub搜索项目。

开源项目的组成部分

在讲清楚之前呢,我们先来了解一下一个开源项目有哪些组成部分:

  • name: 项目名

  • description: 项目的简要描述

  • 项目的源码

  • README.md: 项目的详细情况的介绍

那么除了这些要素之外,项目本身的star数和fork数,也是评判一个开源项目是否火热的标准,这同时也是一个很重要的搜索标准。另外我们也要注意观察这个项目的最近更新日期,因为项目越活跃,那么它的更新日期也更加频繁。

以上要素就是我们在进行搜索的时候要注意的一些关键点。

如何搜索

那我们到底如何搜索呢?

假设我们现在要搜索React,相信大部分小伙伴都是直接在搜索框里输入:“React”,然后一回车,你就会发现情况像下面这样:

搜索结果会显示非常多的开源项目,简直让你应接不暇,无从下手,很多小伙伴搜到这一步就放弃了,因为项目太多了,根本找不到如何找到自己感兴趣的开源项目,所以这样搜索非常的不准确。所以我们来学习一下稍微精确一点的搜索方法。

按照 name 搜索

搜索项目名里面包含React的项目:

in:name React

得到如下结果:

可以看到,这些搜索结果都是项目名里面带有“React”关键字的项目,但是项目数量依旧很多。

现在我们来约束一下

比如我再精确到项目的star数大于5000+:

in:name React stars:>5000

结果是这样的:

搜索结果瞬间精确了很多,现在只有114个项目可供选择。当然我们一般不会把star数设置得这么高,一般设置个1000就差不多了。

同理,我们也可以按照fork的数量来进行搜索:

in:name React stars:>5000 forks:>3000

你会发现,结果越来越精确!

按照README来搜索

搜索README.md里面包含React的项目:

 in:readme React

结果有这么多,那么我们再限制一下它的star数和fork数:

in:readme React stars:>3000 forks:>3000

搜索结果一下子精确到了90个。这个时候你再去选择项目,就会变得容易很多。

按照descriptin搜索

假设我们现在要学习微服务的项目,我们搜索项目描述(description)里面包含微服务的项目:

in:description 微服务

结果有这么多,那我们接着增加一些筛选条件:

in:description 微服务 language:python 

language:python的意思是我们把语言限制为python,我们来看看结果如何:

搜索结果精确了很多。

假如在这些项目里面,我们想要找到最近才更新的项目,意思是更新时间就在最近,我们可以这样:

in:description 微服务 language:python pushed:>2020-01-01

pushed:>2020-01-01的意思是我们把项目的最后更新时间限制到2020-01-01,我们来看看结果如何:

搜索结果只有8个了,这几个项目就属于更新比较活跃的项目,这下再也不纠结了。

在 GitHub 上查找文件

可以使用文件查找器在仓库中搜索文件。 若要在 GitHub 上搜索多个存储库中的文件,请使用 path 代码搜索限定符。

提示:

默认情况下,文件查找器结果将排除某些目录,例如 build、log、tmp 和 vendor。 若要搜索这些目录中的文件,请使用 path 代码搜索限定符。或者,可以使用 .gitattributes 文件自定义默认排除的目录。
按键盘上的 t 键也可以打开文件查找器。 有关详细信息,请参阅“键盘快捷方式”。

使用文件查找器 

  1. 在 GitHub.com 上,导航到存储库的主页。
  2. 在“转到文件”搜索栏中,键入要查找的文件或目录的名称。
    存储库的主视图的屏幕截图。 标记为“转到文件”的搜索栏以深橙色标出。
  3. 或者,如果没有“转到文件”搜索栏,请单击“转到文件”,然后键入要查找的文件或目录的名称。

    存储库的主视图的屏幕截图。 “转到文件”按钮以深橙色框出。

  4. 在结果列表中,单击要查找的文件或目录。 在每个搜索结果下方可以查看目录或文件的文件路径。

自定义排除的文件
默认情况下,如果文件查找器结果存在于存储库根路径中,则结果不会包含以下目录中的文件:

.git
.hg
.sass-cache
.svn
build
dot_git
log
tmp
vendor

可以使用 .gitattributes 文件替代这些默认排除项。

为此,请在存储库根路径中创建或更新名为 .gitattributes 的文件,将应包含在文件查找器结果中的每个目录的 linguist-generated 属性设置为 false。

例如,以下 .gitattributes 文件会导致 build/ 目录中的文件可供文件查找器使用:

build/** linguist-generated=false

请注意,此替代需要使用递归 glob 模式 (**)。 有关详细信息,请参阅 Git 文档中的“模式格式”。 不支持对默认排除目录中的子目录进行更复杂的替代。

搜索仓库

可以在 GitHub 上搜索仓库,并使用这些仓库搜索限定符的任意组合缩小结果范围。

可以在所有 GitHub.com 内全局搜索存储库,也可以在特定组织内搜索存储库。 有关详细信息,请参阅“关于在 GitHub 上搜索”。

若要在搜索结果中包含分支,需要在查询中添加 fork:true 或 fork:only。 有关详细信息,请参阅“在复刻中搜索”。

提示:

有关可以添加到任何搜索限定符以进一步改善结果的搜索语法列表,请参阅“了解搜索语法”。
对多个字词的搜索词使用引号。 例如,如果要搜索具有标签“In progress”的问题,可搜索 label:"in progress"。 搜索不区分大小写。

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

通过 in 限定符,可将搜索范围限制到存储库名称、存储库说明、存储库主题、自述文件内容或这些项的任意组合。 如果省略此限定符,则仅搜索存储库名称、说明和主题。

限定符    示例
in:name    jquery in:name 匹配名称中带有“jquery”的存储库。
in:description    jquery in:name,description 匹配名称或说明中带有“jquery”的存储库。
in:topics    jquery in:topics 将带“jquery”标签的存储库匹配为主题。
in:readme    jquery in:readme 匹配自述文件中提及“jquery”的存储库。
repo:owner/name    repo:octocat/hello-world 匹配特定的存储库名称。

基于仓库的内容搜索

可以使用 in:readme 限定符,通过搜索存储库自述文件中的内容来查找存储库。 有关详细信息,请参阅“关于自述文件”。

除了使用 in:readme,还可以通过搜索存储库中的特定内容来查找存储库。 要搜索仓库内的特定文件或内容,您可以使用查找器或代码特定的搜索限定符。 有关详细信息,请参阅“在 GitHub 上查找文件”和“了解 GitHub 代码搜索语法”。

限定符    示例
in:readme    octocat in:readme 匹配自述文件中提及“octocat”的存储库。

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

若要在特定用户或组织拥有的所有存储库中搜索,可使用 user 或 org 限定符。

限定符    示例
user:USERNAME    user:defunkt forks:>100 匹配来自 @defunkt 且具有超过 100 个分支的存储库。
org:ORGNAME    org:github 匹配来自 GitHub 的存储库。

按仓库大小搜索

size 限定符使用大于、小于和范围限定符查找与特定大小(以千字节为单位)匹配的存储库。 有关详细信息,请参阅“了解搜索语法”。

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

按关注者数量搜索

可以使用 followers 限定符以及大于、小于和范围限定符,根据关注存储库的用户数量筛选存储库。 有关详细信息,请参阅“了解搜索语法”。

限定符    示例
followers:>=n    node followers:>=10000 匹配有 10,000 名或更多关注者提及“node”一词的存储库。
followers:n..n    styleguide linter followers:1..10 匹配有 1 至 10 名关注者提及“styleguide linter”一词的存储库。

按复刻数量搜索

forks 限定符使用大于、小于和范围限定符指定存储库应具有的分支数量。 有关详细信息,请参阅“了解搜索语法”。

限定符    示例
forks:n    forks:5 匹配只有五个分支的存储库。
forks:>n    forks:>=205 匹配至少有 205 个分支的存储库。
forks:<n    forks:<90 匹配具有少于 90 个分支的存储库。
forks:n..n    forks:10..20 匹配具有 10 到 20 个分支的存储库。

按星号数量搜索

您可以使用大于、小于和范围限定符,基于仓库的星标数量来搜索仓库。 有关详细信息,请参阅“使用星标保存仓库”和“了解搜索语法”。

限定符    示例
stars:n    stars:500 匹配正好有 500 个星标的存储库。
stars:n..n size:<n    stars:10..20 size:<1000 匹配有 10 到 20 个星标、小于 1000 KB 的存储库。
stars:>=n fork:true language:LANGUAGE    stars:>=500 fork:true language:php 匹配至少有 500 个星标(包括用 PHP 编写的分支星标)的存储库。

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

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

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

搜索日期时,可以使用大于、小于和范围限定符来进一步筛选结果。 有关详细信息,请参阅“了解搜索语法”。

限定符    示例
created:<YYYY-MM-DD    webos created:<2011-01-01 匹配具有 2011 年之前创建的“webos”一词的存储库。
pushed:>YYYY-MM-DD    css pushed:>2013-02-01 匹配具有在 2013 年 1 月之后推送到其中的“css”一词的存储库。
pushed:>=YYYY-MM-DD fork:only    case pushed:>=2013-03-06 fork:only 匹配在 2013 年 3 月 6 日或之后将“case”一词推送到其中的存储库(即分支)。

按语言搜索

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

限定符    示例
language:LANGUAGE    rails language:javascript 匹配具有以 JavaScript 编写的“rails”一词的存储库。

按主题搜索

您可以找到按特定主题分类的所有仓库。 有关详细信息,请参阅“使用主题对仓库分类”。

限定符    示例
topic:TOPIC    topic:jekyll 匹配按“Jekyll”主题分类的存储库。

按主题数量搜索

可以使用 topics 限定符以及大于、小于和范围限定符,根据应用于存储库的主题数量来搜索存储库。 有关详细信息,请参阅“使用主题对仓库分类”和“了解搜索语法”。

限定符    示例
topics:n    topics:5 匹配具有五个主题的存储库。
topics:>n    topics:>3 匹配具有三个以上主题的存储库。

按许可搜索

您可以根据仓库中许可的类型搜索仓库。 您必须使用许可关键字,按特定许可或许可系列来过滤仓库。 有关详细信息,请参阅“许可仓库”。

限定符    示例
license:LICENSE_KEYWORD    license:apache-2.0 匹配根据 Apache 许可证 2.0 许可的存储库。

按仓库可见性搜索

您可以根据仓库的可见性过滤搜索。 有关详细信息,请参阅“关于仓库”。

| 限定符 | 示例 | ------------- | ------------- | | is:public | is:public org:github 匹配由 GitHub 所有的公共存储库。 | is:private | is:private pages 匹配你可以访问且包含“pages”一词的专用存储库。

基于仓库是否为镜像搜索

您可以根据仓库是否为镜像以及托管于其他位置托管来搜索仓库。 有关详细信息,请参阅“寻找在 GitHub 上参与开源项目的方法”。

限定符    示例
mirror:true    mirror:true GNOME 匹配为镜像且包含“GNOME”一词的存储库。
mirror:false    mirror:false GNOME 匹配不为镜像且包含“GNOME”一词的存储库。

根据存储库是否为模板搜索

你可以根据存储库是否是模板来搜索存储库。 有关详细信息,请参阅“创建模板仓库”。

限定符    示例
template:true    template:true GNOME 匹配是模板且包含“GNOME”一词的存储库。
template:false    template:false GNOME 匹配不是模板且包含“GNOME”一词的存储库。

基于仓库是否已存档搜索

您可以基于仓库是否已存档来搜索仓库。 有关详细信息,请参阅“存档仓库”。

限定符    示例
archived:true    archived:true GNOME 匹配已存档且包含“GNOME”一词的存储库。
archived:false    匹配未存档且包含“GNOME”一词的存储库。

根据带有 good first issue 或 help wanted 标签的议题数进行搜索

可以使用限定符 help-wanted-issues:>n 和 good-first-issues:>n 搜索具有最少标有 help-wanted 或 good-first-issue 的议题的存储库。 有关详细信息,请参阅“使用标签鼓励对项目做出有益的贡献”。

限定符    示例
good-first-issues:>n    good-first-issues:>2 javascript 匹配具有两个以上标有 good-first-issue 的议题且包含“javascript”一词的存储库。
help-wanted-issues:>n    help-wanted-issues:>4 react 匹配具有四个以上标有 help-wanted 的议题且包含“React”一词的存储库。

基于赞助能力的搜索

可以使用 is:sponsorable 限定符搜索其所有者可以在 GitHub Sponsors 上获得赞助的存储库。 有关详细信息,请参阅“关于 GitHub 赞助商”。

可以使用 has:funding-file 限定符搜索具有融资文件的存储库。 有关详细信息,请参阅“在仓库中显示赞助者按钮”。

限定符    示例
is:sponsorable    is:sponsorable 匹配其所有者拥有 GitHub Sponsors 配置文件的存储库。
has:funding-file    has:funding-file 匹配具有 FUNDING.yml 文件的存储库。

总结

好,我们来总结一下。我们想要进行精准搜索,无非就是增加筛选条件。

  • in:name xxx // 按照项目名搜索

  • in:readme xxx // 按照README搜索

  • in:description xxx // 按照description搜索

那么在这里面呢,我们又可以增加筛选条件

  • stars:>xxx // stars数大于xxx

  • forks:>3000 // forks数大于xxx

  • language:xxx // 编程语言是xxx

  • pushed:>YYYY-MM-DD // 最后更新时间大于YYYY-MM-DD

原文链接:

你会在 GitHub上面找项目吗?

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐