作者:kiritomoe

来源:Kirito的技术分享

Github 上有众多优秀的开源项目,大多数 IT 从业者将其当做了予取予求的工具库,遇到什么需求,先去 Github 搜一把,但有没有想过有一天自己也可以给开源事业做一些贡献呢?

本文将会以 incubator-dubbo 项目为例,向你阐释,给开源项目做贡献并不是一件难事。

1 为何要给开源贡献力量

为开源项目做贡献得到的收益是多方面的,为了让你有足够的信心加入到开源项目中,我在文章最开始列举出它的诸多好处。

1.1 巩固技能

无论你是提交代码,撰写文档,提交 Issue,组织活动,当你切身参与到一个开源项目中,相关的技能都会得到历练,并且在开源项目中找到自己的位置。一方面,日常工作中我们中的大多数人接触到的是业务场景,并没有太多机会接触到基础架构组件,开源项目为我们提供了一个平台,在这里,你可以尽情挑选自己熟悉的项目为它添砖加瓦(以 Dubbo 为例,并不是所有 IT 公司都有能力自研服务治理框架);另一方面,你所提交的代码,会有管理员协助审核,他们会给出专业的建议,更好的代码规范以及更优的编程思路最终都会变成你的经验。

1.2 结交朋友

开源社区为你提供了一个平台,在这里,你可以认识很多纯粹的技术爱好者,开源贡献者是最符合 geek 定义的那群人,你所接触到的往往是某个领域最厉害的那批人。

1.3 建立口碑

这是一个很好的展示个人实力的地方,俗话说:talk is cheap,show me the code. 作为技术人员,没有什么比一个漂亮的 Github 主页更有说服力的了。如果你能够为开源项目做出可观的贡献,你也将收获到业界的知名度,此时开源项目的成就和你是密不可分的。

1.4 传承开源精神

只有源源不断的贡献者给开源项目添砖加瓦,才可以为 Github 一类的开源社区形成良好的开源风气。否则,只有输出没有输入,开源会失去活力。

1.5 养成习惯

相信我,一旦养成了每天提交代码的习惯,就像你不想中断打卡一样,你绝不想中断 commit。不止有英语打卡,健身打卡,还有开源打卡!

2 贡献代码时的一些疑难杂症

如果你是一名开源界的新手,可能会对贡献的流程心生畏惧。比如:我该怎么修改代码并提交?我的代码要是存在bug怎么办?我的代码别人会不会很 low?我该如何寻找合适的开源项目?开源社区那么多的工具和词汇都是什么意思?

文章的第二部分将从一个小白的角度,介绍一下开源中的一些常见问题。

2.1 git 常规操作

一般而言,我们选择使用 git 来作为版本管理的工具,你不一定要非常熟练的使用它,在我看来掌握 clone,add,commit,pull,push 即可,遇到复杂的场景,你还有谷歌。

fork 与 clone

如果你只是想下载源码,查看他的源码实现,使用 Clone or download 按钮即可。

如果你想要给开源项目做改动,并且最终请求合并,让开源项目存在你贡献的代码,就应该使用 fork。

fork 将会复制一份当前主分支的代码进入到你的仓库中,之后你所有的修改,应当基于自己的仓库进行,在功能开发/bug 修复之后,可以使用你的仓库向源仓库提交 pull request。只有源仓库的管理员才有权利合并你的请求。

一些可能对你有帮助的高级指令。

  1. # 设置源仓库

  2. git remote add upstream https://github.com/apache/incubator-dubbo.git

  3. # 拉取源仓库的更新

  4. git fetch upstream

  5. # 将自己仓库的主分支合并源仓库的更新

  6. git checkout master

  7. git merge upstream/master

pull request

pull request 经常被缩写为 PR,指的是一次向源仓库请求合并的行为,如上是我 fork 了 incubator-dubbo 的仓库之后才存在的操作按钮。

源仓库视角的 pull request

管理者会对 pull request 涉及的改动进行 review,以确保你的代码是符合规范的,逻辑没有没偏差,以及符合框架的功能需求。

2.2 Travis CI

一些自动化的 CI 流程被植入在每一次 pull request 的构建之中,用于给开源仓库去校验提交者的代码是否符合既定的规范,如:是否有编译问题,单元测试是否通过,覆盖率是否达标,代码风格是否合规等等。

一般情况下,必须通过 CI,你的 pull request 才会被管理 review。

2.3 Mailing list

每个开源项目都会有自己的贡献规范,可以参考首页的 Contributing,来获取具体的信息。incubator-dubbo 作为一个孵化中的 apache 项目,遵守了 apache 的传统,在 Contributing 中描述道:当你有新特性想要贡献给 Dubbo 时,官方推荐使用 Mailing list 的方式描述一遍你想要做的改动。

Mailing list 简单来说,就是一个邮件通知机制,所有的 Dubbo 开发者都会订阅该邮箱:dev@dubbo.incubator.apache.org。有任何新特性的改动,或者什么建议想要通知其他开发者,都可以通过向该邮箱发送邮件来达到这个目的,相同地,你也会收到其转发的其他开发者的邮件。

或者你是一个 Dubbo 的使用者,你想要得知开发者的改造方向,也可以订阅,这个指南可以帮助你订阅 Dubbo 的 Mailing list。

作为一个 modern developer,你可能觉得 mailing list 的交流方式存在滞后性,这样的沟通方式不是特别的高效,但它作为 apache 项目的推荐交流方式存在其特殊的原因,在此不多赘述。总之遵循一个原则:bug fix或者讨论,可以在 github issue 中进行,影响较大的特性和讨论则推荐在 mailing list 中展开。

3 其他贡献形式

不仅仅只有贡献代码,修复 bug 等行为才算作为开源做贡献,以下这些行为也属于主要形式:

3.1 撰写文档

Dubbo文档是其开源组成成分的重要一环,其内容源文件位于:https://github.com/apache/incubator-dubbo-website。同样也是一个 Git 仓库,任何你想要对 dubbo 知识点的补充,都可以在这儿提交 pull request,只需要一些 markdown 的语法知识,和一些可有可无的 npm 语法即可。如果你觉得贡献代码对于现在的自己仍然有点难度,不妨从贡献文档开始接触开源。

3.2 ISSUE

无论是 Github 中的 Issue 还是 mailing list 中的讨论,无论是提出问题,汇报 bug,还是回答问题(bugfix 则不仅仅需要 Issue 了),协助管理者 review pull request,都是贡献的一种形式,勿以善小而不为。

3.3 其他行为

任何你能够想到的,可以帮助开源项目变得更好的的行为,都属于开源贡献。例如,给每个 Issue 打上合适的 tag,关闭重复的 Issue,链接相关联的 Issue,线下组织沙龙,回答 Stack Overflow 上相关的问题,以及文档中一个错别字的修改等等。

4 开源最佳实践

4.1 有效沟通

无论你处于什么样的目的:仅仅是一次性的贡献,亦或是永久性的加入社区,都的和他人进行沟通和交往,这是你要在开源圈发展必须修炼的技能。

在你开启一个isse或PR之前,或者是在聊天室问问题之前,请牢记下面所列出的几点建议,会让你的工作更加的高效。

给出上下文 以便于让其他人能够快速的理解。比方说你运行程序时遇到一个错误,要解释你是如何做的,并描述如何才能再现错误现象。又比方说你是提交一个新的想法,要解释你为什么这么想,对于项目有用处吗(不仅仅是只有你!)

以Dubbo为例,聊聊如何为开源项目做贡献相关推荐

  1. python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

    python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...

  2. python开源项目贡献_65%的公司在为开源项目做贡献

    python开源项目贡献 今年是第十届年度开放源代码未来调查,该调查由Black Duck和North Bridge主办,旨在研究开放源代码的趋势. 今年调查的主要成果围绕着当今对开放源代码的主流接受 ...

  3. 为什么学计算机的学生应该向开源项目做贡献?

    作者 | Diomidis Spinellis 译者 | 弯月     责编 | 张红月 出品 | CSDN(ID:CSDNnews) 编程是所有计算机科学.信息学.软件工程和计算机工程专业的必修课. ...

  4. git 怎么为开源项目做贡献,怎么有效管理贡献者的提交

    ,当作为项目贡献者时,我们该怎么做才能方便维护者采纳更新:或者作为项目维护者时,又该怎样有效管理大量贡献者的提交. 5.1  分布式工作流程 同传统的集中式版本控制系统(CVCS)不同,开发者之间的协 ...

  5. github 修改项目为public_在GitHub上为开源项目做贡献

    git已经是多人协作coding的标配,GitHub上有很多开源项目,由一些人进行维护,还有更多的人为其贡献代码,对某个开源项目贡献代码大概可以分为下面几个步骤: 1,fork一份自己的repo 给开 ...

  6. python开源项目贡献_如何通过为开源项目做贡献来发展自己的职业

    python开源项目贡献 我16岁的儿子Prahlad刚走进我们的公寓. "他说什么???" 我问. "他说'是'." 轻描淡写,玩起来很酷,就像许多青少年与父 ...

  7. 以 VS Code为例,看大型开源项目是如何应用软件工程的?

    以 VS Code为例,看大型开源项目是如何应用软件工程的? 作者宝玉,Groupon资深工程师,微软专家:以下文章摘自<软件工程之美>. 你好,我是宝玉. 如果你所在的团队在日常的软件项 ...

  8. 改:如何基于开源项目做二次开发

    改:如何基于开源项目做二次开发 ‌[保持纯洁,加以包装] 当我们发现开源项目有的地方不满足我们的需求的时候,自然会有一种去改改的冲动,但是怎么改是个大学问.一种方式是投入几个人从内到外全部改一遍,将其 ...

  9. node.js是开源的吗_为开源做贡献并不难:我为Node.js项目做贡献的旅程

    node.js是开源的吗 As a developer, you should consider contributing to open source software. Many of your ...

最新文章

  1. Linux-鸟菜-6-文件与目录的 默认权限、隐藏权、特殊权限
  2. iOS 设置Label中特定的文字大小和颜色
  3. ●BZOJ 4556 [Tjoi2016Heoi2016]字符串
  4. 明天一定要记得放一个硬币在口袋
  5. 如何监视ps/查询的性能和使用
  6. linux文件编辑命令详细整理,Linux文件编辑命令vi详细说明
  7. 「超级右键」Mac必备的一款软件,新手get!
  8. 数据库SQL Server循环游标读取例子
  9. 【Vue】—动态组件
  10. 一张以你为中心的地图
  11. java锁的对象引用
  12. 【XLL 框架库函数】 TempInt/TempInt12
  13. EasyDarwin添加自定义的服务模块EasyMyModule
  14. (学习笔记1)可见光与红外图像的特征融合(Feature Fusion)
  15. 学校计算机总帐和明细帐的表格,5教学仪器设备总账和明细账填写模板.doc
  16. 制作maven模板框架
  17. itsm安装部署(Vmware)
  18. 世界第 3 的滴滴裁员,求职季必知的独角兽公司排行榜
  19. 个人计算机能力提升研修计划,教师计算机能力提升个人研修计划
  20. matlab离散与连续系统仿真

热门文章

  1. linux history 命令 shell历史记录显示 HISTSIZE
  2. C语言--static修饰变量
  3. Linux System Programming -- Appendix
  4. Linux System Programming --Chapter Five
  5. TCP/IP详解--第十六章
  6. TCP/IP详解--学习笔记(11)-TCP交互数据流,成块数据流
  7. c#执行多句oracle,在Oracle命令C#中执行多次插入表命令
  8. java新建常量_【Java】常量 - 每日坚果的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. android绘制高亮区域,实现高亮某行的RecyclerView效果
  10. oracle 查看 用户密码,oracle 查看用户密码的修改时间