别害羞,开源社区真的很需要你,教你如何参与开源社区~

2023-05-16

前言

相信各位开发者多多少少会在实际开发的过程中会使用一些开源的技术,例如前端的 vue, react, 以及大量的第三方库如 echart,color.js, day.js 等等,后端就更多了,从到 api 网关到注册中心,微服务框架,日志服务等等。

不知道有多少开发者有想过 为自己使用的开源项目贡献代码 呢? 反正我自己是一直都想为一个牛逼的开源项目做出贡献,甚至成为一个 commiter 。但是我相信大部分的开发者都和我一样觉得:”这么牛逼成熟的框架,有我什么事,我连用都用的磕巴,更何况去贡献代码呢?“

但是事实却是开源社区非常需要各位的加入,尤其是在国内开发者众多但是开源社区氛围并不好的情况下,更是需要有人带动大家积极参与到社区的互动中。所以导致了一个开源社区特别 渴望拥有更多开发者参与,无论你是什么水平都希望你一起进来玩,而开发者则 担心自己水平不足 而会被其他开发者看不起,或者自己并不了解如何正确参与开源社区的姿势~

那么本篇文章就给大家讲讲如何参与到开源项目中,如果去为社区贡献代码,在 github 中大家都是怎么玩儿的。

开源社区需要你

在开源社区中,最最最重要的不是技术,不是代码,而是人!社区如果足够活跃,就一定会有菜鸟到大神的各个级别的参与,开源社区最不怕你 写的代码不好,而是没有人 参与互动交流。为什么这么说呢?

如果你是一个水平很高,技术很强的大佬,你自己写了一个开源的项目,其中核心的部分你完善的非常好,并且有了几个常驻在项目中的高水平开发者。

但是随着使用者越来越多,各种各样的设备、运行环境、使用方式都会导致 bug 的出现,在刚开始几个核心开发者可以应付所有的问题。但是如果每天出现几十个问题,每一个问题都需要去复现,有的时候反馈者还说的不明不白的,需要你去引导他描述清楚问题,加上你可能还有自己的工作,慢慢的问题就开始堆积起来了,其中不乏只是文本内容错误简单的格式错误这种非常基础的问题。

又或者开源项目需要新增某个简单的功能,但是核心开发者因其他的原因无暇顾及,加之问题堆积,慢慢的这个社区就变成了一摊死水。

项目长期不更新迭代,问题没人处理,项目维护者面对这么多的问题心有余而力不足。一个优秀的项目可能因此失去生机。

但如果这时,有了四五个水平不是很高的开发者,帮助你回答一些基本的问题,简单的错误很快就能搞定并提交,而且时不时还能帮你宣传一下你的项目,这样这个项目不就好起来了嘛 ~

随着这样的人越来越多,会有更多大佬或者大公司使用你的项目进行开发,到这时会有很多的大神涌入,项目的整体技术水平得到进一步的提高,项目的知名度也更高,曾经参与过简单贡献的开发者也同样会因此感到自豪,并且这也是一件 对于个人发展来说很加分的事情

如何参与开源社区

OK,上面说了那么多, 下面讲讲开发者要如何参与到开源社区中呢?我相信有很多没有经验的开发者对于这件事是很懵的,我在几个月前也同样很懵,但最近在真正参与进去后其实也没有那么难,而且非常开心能做出自己的贡献!

前置要求

  1. 一般是通过 github 参与社区,因此需要你具有 科(v)学(p)上(n)网 的能力,除此以外就是注册一个 github 账号就好了,应该大部分的开发者都是有 github 账号的,这部分不赘述。
  2. 会用 git ,git 的基本概念和使用必须学习一下,不然没办法参与。
  3. 了解项目大概结构和功能,只有了解项目才能更好的做贡献,这里并不需要非常的深入,可以在参与的过程中慢慢熟悉。
  4. 别较劲,看不懂直接 chrome 右上角翻译,想留言或者回复直接翻译工具 中翻英 即可,大家都很开放包容,重要的是你的贡献。

怎么找需求

首先你需要找到你想要参与的项目,有很多大型开源项目是有周边生态的,从前端到后端都能覆盖到。例如 vue ,vue 的话有一大把的周边生态,找一个你感兴趣的就 ok。

在 github 中进入对应的项目,这里我以我最近贡献代码的 apache/apisix-dashboard 这个项目举例。

在项目页面的顶部标签栏中有以下几项功能,如下图:

image.png

  • Code: 项目的源码,你可以直接在 github 上预览,也可以克隆到本地在 ide 工具中跑跑看,主要你得熟悉源代码,这样才能为项目做贡献。
  • issues: 项目的问答区,一般我们的开发需求就是在这里面找的。
  • Pull requests:项目的拉取请求,这里拉取是指:开发者者在 自己的仓库 中修改好了代码,想要 请求项目的维护者拉取到项目的主仓库 中。

其实标签栏这里的顺序也很有意思,按照你正常的贡献流程走,你得先熟悉项目源码,然后再去找问题,解决问题后提交代码。

假设你已经了解了这个项目,你想要参与项目贡献,那么你直接进入 issues 标签页面中,每一个 issue 的结构如下:

image.png

在 issues 中你可能会看到很多很多的英语,这是为了覆盖更多的海外开发者语言或者项目本身为海外开发者所开发。如果你是第一次参与贡献,你可以找标签为 good first issue 问题,这个是项目维护者觉得比较简单且适合新开发者参与的问题,当然你也可以点击右上角 Labels 按钮:

image.png

点击直接筛选某个标签:

image.png

当你找到了一个还没有分配的 issue ,点进去看他的内容,里面会有一个列表是一些开发者的讨论内容:

image.png

第一个框框是 问题的具体描述,你需要根据上下文看看这个问题如何进行修改,如果提问者问的不清晰,你可以回复他让他补充更多内容。如果你看懂了这个问题,并且心里大概知道如何修改了,那么你接下来可以按照这个以下流程来走:

在 issue 中回复一下,要求将这个问题分配给你,如果你不知道怎么说可以这么发:Please assign the issue to me and I will try to solve it ,项目维护者看到就会将 issue 分配给你的。然后你就可以将代码 fork 到自己仓库中,点击右上角的 fork 按钮 就能进行仓库 fork:

image.png

fork 的意思是从别人的代码库中复制一份到你自己的代码库,与普通的复制不同,fork 包含了原有库中的所有提交记录,之后你的操作都是在自己 fork 的仓库中进行。

然后克隆到本地,进行开发环境的基本部署。这时候千万不要直接开始开发,开发需要新建一个分支,并切换到新分支上进行开发,具体原因后面会说,在 vscode 中你可以这么操作:

image.png

image.png

在新分支完成开发后,你需要提交这个分支到你的仓库,提交和推送的流程这里不赘述,提交完成后你的 github 仓库中就会比项目原本的仓库多一个分支,这时候你就可以提 pr 了。

在 github 中,pull requests 页面点击绿色按钮:

image.png

提交 pr 时记得修改一下具体的描述,一般需要贴一下你修改部分的截图,以及你这个 pr 是为了解决哪个 issue ,用文字描述一下更新了什么东西,具体的话会有一个模板的,描述清晰有助于 pr 的 review。

在提交了 pr 之后,你需要常常关注 pr 的状态,因为只有项目维护者 review (审查)通过后,你的代码才可以合并入主分支,如果有需要修改的问题,项目维护者会在 pr 下面评论的。

如果你的 pr 需要再次修改怎么办呢?这时你还是在新建的那个 pr 中进行开发,提交代码到你的仓库,如果有 pr 了你的提交记录会自动同步过去的,不需要重复提 pr 。

这也就是为什么我们要新建一个分支进行开发,如果你在 master 上进行开发,你虽然可以提 pr ,但是你之后的操作都会同步到 pr 上,如果你的 pr 完成之后被合并进去了,你继续在 master 分支上开发,你 之后提的新 pr 都会带有以前 pr 的 commit 记录,这样就会很乱了。

所以如果我们的 pr 完成,代码被合并到了主仓库,你要把那个分支给删除掉,同时在 master 分支上拉取一下最新的代码。这样我们在创建新分支的时候就会基于最新的代码创建了。

上面的过程听起来可能有点绕,举个例子,假如你看到一个 issue ,需要将一个文本从 hello world 改成 hello oiloil,于是你直接在 master 分支上修改,然后提 pr ,在这个 pr 中代码维护者可以看到你所有的提交记录,也就是你修改了一行文本。

这时维护者说你需要将 hello oiloil 改成 hello oil-oil ,你直接在 master 上修改并提交代码,pr 会自动同步你的操作,也就是你从 hello world -> hello oiloil, hello oiloil -> hello oil-oil 的提交过程都会有,维护者看到你已经改好了就会将这个 pr 通过,并合并代码。

但是下一次你要进行其他的开发,当你还在 master 分支上开发后,你一提交 pr ,发现自己上一次改 hello world-> hello oil-oil 的提交记录还在,并且多了一些提交记录,对于 review 代码的人而言你就是多改了其他部分的代码了。

还有很多很多的参与方式,例如代码 review ,项目投票,甚至单纯去里边聊聊天,刷刷脸都是对开源社区活跃度的贡献!

加入开源的好处

首先是技术,想要参与开源,不说 0 基础就能参与,多多少少还是有些门槛的,而且你会被促使着去了解源码,这对于其中技术实现的学习是很有帮助的。

其次是影响力,在社区中倡导人人平等,贡献优先,你做出的贡献也就是代表你的影响力,付出的越多得到的越多从来没错。

最后是资源,在社区中非常非常容易结交到技术大神,而且开源社区会有很多讲座会议,可以拓展你的技术人脉,能够和志同道合的人一起开发这是多爽的一件事情!

其实讲这一点显得有点功利了,我了解到很多人都是因为应聘需要而去了解开源社区的。无非就是可以提升个人的影响力,如果为大的项目贡献过代码说明技术能力也是能够得到认可的。

个人关于开源的思考

在我过往的认知中,开源项目一般是某个大公司将业务增长过程中的某些技术积累进行抽离并开源,开源也只是为了提升公司中技术团队的影响力,同时从开源社区中汲取更多贡献者的反哺。

但是最近我才知道有那么多优秀的开源项目通过他们独特的治理方式以及社区氛围得到了很多关注,并且也发展的越来越好。最后再打波开源项目的广告,Apache APISIX 是一个动态、实时、高性能的 API 网关,如果有最近正在进行 API 网关技术选型的同学千万不要错过,欢迎多多 star ,更欢迎加入社区中一起玩!

希望国内的开源社区氛围越来越好,祝大家除了升职加薪外还能得到额外的开发带给你的快乐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

别害羞,开源社区真的很需要你,教你如何参与开源社区~ 的相关文章

  • 树莓派解决cannot currently show the desktop最优法

    最近在搞树莓派前面的步骤都轻轻松松的解决了这个问题卡了我很久 这个是解决之后的效果 xff0c 我使用改分辨率用了很多办法这个办法解决的效率最快 直接在下载好文件的解决 1 将有sd卡的读卡器插入 2 在config txt文件中加入四句话
  • 十、C++中的类 class与struct的区别

    面向对象程序设计 xff0c 需要诸如类和对象这样的概念 C 43 43 支持面向过程 基于对象 面向对象 泛型编程四种 C语言不支持面向对象编程 类是一种将数据和函数组织在一起的方式 一个函数参数过多 xff0c 代码不好维护 xff0c
  • 飞控开发--气压计MS5611

    ms5611简介 xff1a 官方给出的最大分辨率 xff1a 10cm 工作电压 xff1a 1 8v 3 6v 气压 AD 精度 xff1a 24位 工作环境 xff1a xff0d 40 43 85 C xff0c 10 1200mb
  • 如何使用JavaScript将Set转换为Array?

    如何使用JavaScript将Set转换为Array xff1f 下面本篇文章家里给大家介绍一下在JavaScript中将Set转换为Array的方法 xff0c 希望对大家有所帮助 在JavaScript中 xff0c 想要将Set xf
  • 如何在Markdown中插入图片并顺利共享

    使用PicGo 43 GitHub搭建图床 实现便捷的Markdown图片管理 昨天在呕心沥血写 xff08 搬 xff09 完我的第一篇技术分享博文m1 使用 VMware 安装 CentOS7 并部署 k8s 高可用集群之后 xff0c
  • 海康威视网络摄像头sdk的开发(Demo的使用)指南

    如果您是想实现海康sdk包的Demo实例中MFC的分功能 xff0c 那么请慢慢看 xff0c 这篇文章百分之九十九可以帮你实现 提醒 xff1a 内容来自网络和自己实际操作 xff0c 如有问题请联系hww168 64 yeah net
  • Proxy反向代理解决跨域问题

    一 问题的产生 在项目开发过程中遇到了一个问题 xff0c 访问图片与访问其他的数据的服务器不是同一个 xff0c 虽然后台已经将两个服务器合并到一个 xff0c 但是前台配置好后访问就会产生了一个问题 xff0c 具体报错如下 xff1a
  • 什么是枚举【详解】

    本期介绍 x1f356 主要介绍 xff1a 什么是枚举 xff0c 枚举是如何定义 初始化的 xff0c 以及枚举到底如何使用 xff0c 还有枚举这种语法存在的优点有那些 x1f440 文章目录 一 什么是枚举 x1f356 二 枚举类
  • vscode将项目导入远程仓库 git

    1 打开软件 点击第三个图标 远程仓库 点击代码管理右上角三个小点 远程 远程仓库 添加远程存储库 跳出输入框 2 复制git的地址 3 将上一步复制的仓库链接 粘贴进去 回车 4 命名 5 打开命令行 输入下列命令 用户名 邮箱 PS D
  • 深度学习二

    BT神经元为按照误 差逆向传播算法训练的多层前馈神经网络 BT神经网络分为输入层 隐藏层 输出层 输入层一般有数据种类多个神经元 xff0c 接受数据 隐藏层的神经元为根号下隐藏层 输出层加b个 xff0c 输入的每个数据加权和返回数之和为
  • ROS学习(五)

    学习古月 ROS机器人开发实践 一书时 xff0c 在第六章的6 3遇到的问题的总结 在执行将xacro文件转化成urdf的文件格式时 xff0c 执行语句 rosrun xacro xacro py mrobot urdf xacro g
  • 新建Mavlink消息

    1 下载Mavlink生成器 1 1 Git clone 需要在翻墙的网络环境下下载 span class token function git span clone https github com mavlink mavlink git
  • Python从入门到精通11天(lambda匿名函数和map函数的使用)

    lambda匿名函数和map函数的使用 lambda匿名函数map函数lambda与map的联用 lambda匿名函数 匿名函数在计算机编程中是指一类无需定义标识符 xff08 函数名 xff09 的函数或子程序 xff0c lambda函
  • STM32F407单片机移植ADS1115驱动程序

    最近一个工程项目需要使用ADS1115采集电压 xff0c 网上研究了一下 xff0c 测试成功 xff0c 期间走了很多弯路 xff0c 为避免后来的研究者重走我的老路 xff0c 特分享给大家 注 xff1a 网上很多ADS1115驱动
  • Python入门到精通12天(迭代器与生成器)

    迭代器与生成器 迭代器生成器 迭代器 迭代器是可迭代的对象 xff0c 即可以进行遍历的对象 列表 字符串 元组 字典和集合这些都是可迭代的对象 xff0c 都可以进行遍历 迭代器是一种访问序列元素的方式 xff0c 它可以通过next 函
  • C语言从入门到精通第8天(分支结构if、else、switch的使用)

    分支结构if else switch的使用 if语句if else语句if else嵌套if else if else语句switch语句 if语句 语法 xff1a if 表达式 语句 xff1b 如果表达式为真 xff0c 则执行 里面
  • Python入门到精通13天(global和nonlocal关键字的使用)

    global和nonlocal关键字的使用 作用域global关键字的使用nonlocal关键字的使用 作用域 在Python中变量的作用域由其代码块决定 xff0c 在代码块中定义的的变量和函数属于局部作用域 xff1b 在函数中定义的变
  • Python从入门到精通14天(eval、literal_eval、exec函数的使用)

    eval literal eval exec函数的使用 eval函数literal eval函数exec函数三者的区别 eval函数 eval 是Python中的内置函数 xff0c 它可以将一个字符串作为参数 xff0c 并将该字符串作为
  • Python从入门到精通15天(浅拷贝和深拷贝)

    浅拷贝和深拷贝 深浅拷贝概述浅拷贝深拷贝 深浅拷贝概述 在Python中 xff0c 对象是通过引用传递的 xff0c 这意味如果创建了一个对象 xff0c 然后将其赋值给另一个变量 xff0c 那么两个变量将引用同一个对象 xff0c 即
  • C语言从入门到精通第9天(循环结构的使用)

    循环结构的使用 while语句do while语句for语句嵌套循环 循环结构可以重复的执行一段代码块 xff0c 在C语言中提供了三种不同类型的循环结构 xff1a for while和do while while语句 语法 xff1a

随机推荐

  • C语言从入门到精通第10天(break和continue的使用)

    break和continue的使用 break语句continue语句 break和continue是两种控制流程的语句 xff0c 他们只能在循环中被使用 xff0c 用于控制循环的执行 如果在非循环中被使用了则会导致语法的错误 brea
  • C语言从入门到精通第11天(数组的基本操作)

    数组的基本操作 数组的概念一维数组二维数组 数组的概念 在程序设计中 xff0c 为了方便处理数据把具有相同类型的若干变量按有序形式集合在一起 xff0c 这些按序排列的同类数据元素的集合称为数组 在C语言中 xff0c 数组属于构造数据类
  • C语言从入门到精通第12天(函数的定义)

    函数的定义 函数的概念函数的定义函数的参数函数的返回值 函数的概念 在程序设计中 xff0c 为了实现某个功能需要编写多行代码 xff0c 我们每次在使用时都将原来的代码重复编码 xff0c 这样就非常的麻烦 xff0c 而且编程的效率也不
  • C语言从入门到精通第13天(函数的调用)

    函数的调用 无参函数的调用有参函数的调用函数的嵌套调用递归函数的调用函数的声明 函数在定义完以后 xff0c 如果不被调用时不会被执行到的 xff1b 在程序中main函数是主函数 xff0c 是会被自动调用 xff0c C程序有且只有一个
  • 项目实战-外卖自提柜 2. CubeMX + FreeRTOS入门

    项目实战 外卖自提柜 1 项目介绍 协议制定 项目实战 外卖自提柜 2 CubeMX 43 FreeRTOS入门 项目实战 外卖自提柜 3 FreeRTOS主要API的应用 项目实战 外卖自提柜 4 FreeRTOS 堆栈分配 调试技巧 项
  • C语言从入门到精通第14天(局部变量和全局变量)

    局部变量和全局变量 局部变量全局变量 局部变量 简单来说 xff0c 在C语言中的局部变量就是定义在 中的变量 xff0c 他的作用域也在 内 xff0c 他的生命周期随着 结束而结束 例如 xff1a span class token k
  • C语言从入门到精通第15天(C语言预处理)

    C语言预处理 预处理概述宏定义条件编译 预处理概述 在前面我们已经对C语言的基础语法知识有所了解了 xff0c 每次进行程序的编写之前 xff0c 我们会使用 include命令去导入我们的库函数 xff0c 而这种以 号开头的命令称为预处
  • C语言从入门到精通第16天(指针的定义与基本使用)

    指针的定义与基本使用 什么是指针 xff1f 指针变量的定义指针变量的基本使用 什么是指针 xff1f 在使用指针之前我们需要对指针进行初步的了解 xff0c 首先我们要知道什么是指针 xff1f 通过前面的学习我们已经知道了内存的存储方式
  • 作为一个大学生你应该知道的事情

    作为一个大学生你应该知道的事情 大学生毕业去向 今天 xff0c 我们不写技术 xff0c 来谈一谈大学生的毕业现状 xff1a 以下内容为本人的一些观点和看法 xff0c 仅限于沟通交流 大学生毕业去向 大学生的毕业去向大致可以分为 xf
  • C语言从入门到精通第17天(指针和数组联用)

    指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前 xff0c 我们先对指针变量进行补充 我们对比一下int p1和char p2的区别 xff1f 相同点 xff1a 都是指
  • 使用 Keil uVision 和 STM32CubeMX 对 STM32F103C8 进行编程

    采用ARM Cortex M架构的STM32微控制器因其特性 成本和性能而在许多应用中得到广泛应用 在之前的教程中 xff0c 我们已经使用Arduino IDE编程了STM32F103C8 使用Arduino IDE编程STM32很简单
  • 适用于 STM32F103C8 的 FreeRTOS,STM32的多任务同时进行

    概述 xff1a 适用于 STM32F103C8 的 FreeRTOS STM32F103C 是一款ARM Cortex M3 处理器 我们可以在 Arduino IDE 中使用适用于 STM32F103C8 的 FreeRTOS 我们也可
  • PLC为什么会被上位机取代

    随着我们进入高速发展的轨道 xff0c 许多工厂都已经完成了自动化流水线生产的打造 我们可以看到很多大厂已经搭建了智能生产线 所以越来越多的plc工程师开始感觉到 xff0c 只会传统的plc控制 xff0c 已经无法满足公司的企业发展业务
  • 【Vue2】生命周期——钩子函数

    钩子函数 xff1a 在一个Vue实例从创建到销毁的过程自动执行的函数 1 分析生命周期 1 xff09 初始化阶段 xff1a beforeCreate xff08 xff09 生命周期中第一个函数 xff0c 在该函数执行时Vue实例仅
  • 计算机考研全年规划

    此文转载的 xff0c 作为参考 文章目录 一 关于考研常识二 择校择专业 xff08 一 xff09 为什么要考研 xff08 二 xff09 怎么样才能考上研究生 xff08 三 xff09 如何择校选专业1 学硕和专硕该如何选择 xf
  • c#串口编程(傻瓜教程,手把手教你学会)

    在单片机项目开发中 xff0c 上位机也是一个很重要的部分 xff0c 主要用于数据显示 xff08 波形 温度等 xff09 用户控制 xff08 LED xff0c 继电器等 xff09 xff0c 下位机 xff08 单片机 xff0
  • CMakeLists.txt编写规则

    一 基本语法 语法格式 指令 参数1 参数2 1 参数间用空格或分号隔开 2 指令大小写无关 参数和变量大小写相关 3 变量用 方式取值 但在if语句中直接用变量名 二 重要指令 1 cmake minimum required 指定CMa
  • [stm32] Start Tour-一些元件的连接

    如果觉得有帮助的话就点个赞吧 持续更新 目录 一 蜂鸣器 注意点 xff1a 二 独立按键 一 蜂鸣器 根据原理图连的实物图如右 xff1a 注意点 xff1a 1 xff09 蜂鸣器分正负极 2 xff09 VCC和GND是32板的总电源
  • ROS中Gazebo无响应解决办法

    标题ROS中Gazebo无响应解决办法 在终端输入gazebo没有反映 xff0c 进行下面两句操作 首先输入下面的代码 gazebo verbose 观察到报错显示原因为有另一个gazebo进程于是杀死这个进程则问题解决代码如下 xff1
  • 别害羞,开源社区真的很需要你,教你如何参与开源社区~

    前言 相信各位开发者多多少少会在实际开发的过程中会使用一些开源的技术 xff0c 例如前端的 vue react 以及大量的第三方库如 echart xff0c color js day js 等等 xff0c 后端就更多了 xff0c 从