前言
相信各位开发者多多少少会在实际开发的过程中会使用一些开源的技术,例如前端的 vue, react, 以及大量的第三方库如 echart,color.js, day.js 等等,后端就更多了,从到 api 网关到注册中心,微服务框架,日志服务等等。
不知道有多少开发者有想过 为自己使用的开源项目贡献代码 呢? 反正我自己是一直都想为一个牛逼的开源项目做出贡献,甚至成为一个 commiter 。但是我相信大部分的开发者都和我一样觉得:”这么牛逼成熟的框架,有我什么事,我连用都用的磕巴,更何况去贡献代码呢?“
但是事实却是开源社区非常需要各位的加入,尤其是在国内开发者众多但是开源社区氛围并不好的情况下,更是需要有人带动大家积极参与到社区的互动中。所以导致了一个开源社区特别 渴望拥有更多开发者参与,无论你是什么水平都希望你一起进来玩,而开发者则 担心自己水平不足 而会被其他开发者看不起,或者自己并不了解如何正确参与开源社区的姿势~
那么本篇文章就给大家讲讲如何参与到开源项目中,如果去为社区贡献代码,在 github 中大家都是怎么玩儿的。
开源社区需要你
在开源社区中,最最最重要的不是技术,不是代码,而是人!社区如果足够活跃,就一定会有菜鸟到大神的各个级别的参与,开源社区最不怕你 写的代码不好,而是没有人 参与互动交流。为什么这么说呢?
如果你是一个水平很高,技术很强的大佬,你自己写了一个开源的项目,其中核心的部分你完善的非常好,并且有了几个常驻在项目中的高水平开发者。
但是随着使用者越来越多,各种各样的设备、运行环境、使用方式都会导致 bug 的出现,在刚开始几个核心开发者可以应付所有的问题。但是如果每天出现几十个问题,每一个问题都需要去复现,有的时候反馈者还说的不明不白的,需要你去引导他描述清楚问题,加上你可能还有自己的工作,慢慢的问题就开始堆积起来了,其中不乏只是文本内容错误,简单的格式错误这种非常基础的问题。
又或者开源项目需要新增某个简单的功能,但是核心开发者因其他的原因无暇顾及,加之问题堆积,慢慢的这个社区就变成了一摊死水。
项目长期不更新迭代,问题没人处理,项目维护者面对这么多的问题心有余而力不足。一个优秀的项目可能因此失去生机。
但如果这时,有了四五个水平不是很高的开发者,帮助你回答一些基本的问题,简单的错误很快就能搞定并提交,而且时不时还能帮你宣传一下你的项目,这样这个项目不就好起来了嘛 ~
随着这样的人越来越多,会有更多大佬或者大公司使用你的项目进行开发,到这时会有很多的大神涌入,项目的整体技术水平得到进一步的提高,项目的知名度也更高,曾经参与过简单贡献的开发者也同样会因此感到自豪,并且这也是一件 对于个人发展来说很加分的事情!
如何参与开源社区
OK,上面说了那么多, 下面讲讲开发者要如何参与到开源社区中呢?我相信有很多没有经验的开发者对于这件事是很懵的,我在几个月前也同样很懵,但最近在真正参与进去后其实也没有那么难,而且非常开心能做出自己的贡献!
前置要求
- 一般是通过 github 参与社区,因此需要你具有 科(v)学(p)上(n)网 的能力,除此以外就是注册一个 github 账号就好了,应该大部分的开发者都是有 github 账号的,这部分不赘述。
- 会用 git ,git 的基本概念和使用必须学习一下,不然没办法参与。
- 了解项目大概结构和功能,只有了解项目才能更好的做贡献,这里并不需要非常的深入,可以在参与的过程中慢慢熟悉。
- 别较劲,看不懂直接 chrome 右上角翻译,想留言或者回复直接翻译工具 中翻英 即可,大家都很开放包容,重要的是你的贡献。
怎么找需求
首先你需要找到你想要参与的项目,有很多大型开源项目是有周边生态的,从前端到后端都能覆盖到。例如 vue ,vue 的话有一大把的周边生态,找一个你感兴趣的就 ok。
在 github 中进入对应的项目,这里我以我最近贡献代码的 apache/apisix-dashboard 这个项目举例。
在项目页面的顶部标签栏中有以下几项功能,如下图:
- Code: 项目的源码,你可以直接在 github 上预览,也可以克隆到本地在 ide 工具中跑跑看,主要你得熟悉源代码,这样才能为项目做贡献。
- issues: 项目的问答区,一般我们的开发需求就是在这里面找的。
- Pull requests:项目的拉取请求,这里拉取是指:开发者者在 自己的仓库 中修改好了代码,想要 请求项目的维护者拉取到项目的主仓库 中。
其实标签栏这里的顺序也很有意思,按照你正常的贡献流程走,你得先熟悉项目源码,然后再去找问题,解决问题后提交代码。
假设你已经了解了这个项目,你想要参与项目贡献,那么你直接进入 issues 标签页面中,每一个 issue 的结构如下:
在 issues 中你可能会看到很多很多的英语,这是为了覆盖更多的海外开发者语言或者项目本身为海外开发者所开发。如果你是第一次参与贡献,你可以找标签为 good first issue 问题,这个是项目维护者觉得比较简单且适合新开发者参与的问题,当然你也可以点击右上角 Labels 按钮:
点击直接筛选某个标签:
当你找到了一个还没有分配的 issue ,点进去看他的内容,里面会有一个列表是一些开发者的讨论内容:
第一个框框是 问题的具体描述,你需要根据上下文看看这个问题如何进行修改,如果提问者问的不清晰,你可以回复他让他补充更多内容。如果你看懂了这个问题,并且心里大概知道如何修改了,那么你接下来可以按照这个以下流程来走:
在 issue 中回复一下,要求将这个问题分配给你,如果你不知道怎么说可以这么发:Please assign the issue to me and I will try to solve it ,项目维护者看到就会将 issue 分配给你的。然后你就可以将代码 fork 到自己仓库中,点击右上角的 fork 按钮 就能进行仓库 fork:
fork 的意思是从别人的代码库中复制一份到你自己的代码库,与普通的复制不同,fork 包含了原有库中的所有提交记录,之后你的操作都是在自己 fork 的仓库中进行。
然后克隆到本地,进行开发环境的基本部署。这时候千万不要直接开始开发,开发需要新建一个分支,并切换到新分支上进行开发,具体原因后面会说,在 vscode 中你可以这么操作:
在新分支完成开发后,你需要提交这个分支到你的仓库,提交和推送的流程这里不赘述,提交完成后你的 github 仓库中就会比项目原本的仓库多一个分支,这时候你就可以提 pr 了。
在 github 中,pull requests 页面点击绿色按钮:
提交 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 ,更欢迎加入社区中一起玩!
希望国内的开源社区氛围越来越好,祝大家除了升职加薪外还能得到额外的开发带给你的快乐!