前言

作为一名职业程序员,如果去除待遇,薪资等等的因素考虑,从纯技术的角度出发,如何才能达到一个比较高的境界呢,答案是与最顶尖的那一批人交流合作,当然,最顶尖的那批人很多几乎估计都不在身边,而且大多在国外。那么难道就没有办法了吗,不是的,不要忘了还有网络这个东西,可以通过社区,邮件进行交流,提出自己的想法。这些人往往活跃于许多开源社区,比如Apache.下面有很多的子项目,都是非常棒的系统。所以本文的1个关键词,开源社区。所以说,如果一个普通开发者能够向开源社区打出自己的patch(补丁),并且此部分代码能够被merge进主干代码中,将会是一个开发者非常令人骄傲的一个事情。不要以为这个事情很难,开源社区的代码中也可能出现比如显示文字出错这样的低级错误,如果被你发现了,也是一个patch。总的一句话,能够向开源社区打patch的人,也许不能说明他又多强,但是一定程度上能说明他是具有钻研精神和思考能力的,毕竟大部人都还只是停留在使用这些开源社区的产品的层面上,对于内部复杂的设计与实现却只是略知一二。下面就来讨论一下,作为一个非Commiter,如何向开源社区提交代码,打出自己的patch。

打Patch的前提

首先打patch的一个前提条件是建立在你已经拥有分析和改造已有开源系统代码的能力之上。但是鉴于开源系统本身的复杂性,你可以专注于研究其中部分模块代码。比如Hadoop代码,你可以选择研究HDFS,或者说YARN,亦或者MapReduce这块,不管怎么说,你要拥有阅读和改造某块代码的能力。

Patch注意事项

Patch是如何打出的呢,patch的中文意思简称是”补丁”的意思,补丁类型的代码当然某种程度上指的是“修改”代码,包括修改代码和增删代码,也就是代码的变化之处,那么有什么工具可以知道代码的变化呢,git diff命令正好可以帮助我们解决这个问题。通过git diff > your desFileName命令就可以导出这个patch文件了,具体的命令读者可以自行查阅此命令的用法。但是这里又会有一个问题,patch打出来之后,只能说明这段patch代码能够运作正常,并不能代表这段patch遵守一定的规范。下面列出几个开源社区中对patch的一些约束,下面是一张Hadoop QA测试结果表。

其中注意下面几项:

1.patch必须是打在最新的代码之上的,否则会出现合并代码出错的情况,因为patch中会有每行代码的文件名和对应位置,一旦不是在最新代码上的修改必然会出错.

2.每行代码的最大长度不能超过80个字符,否则会包checkstyle error,所以建议的方法是每修改玩自己的代码以hadoop format格式文件的方式进行格式化操作.

3.多余空白行不能有.否则会报whitespace,多余空白行的意思指的是回车另起一行的时候,一般会多一行的空白行,要用delete建,把此行前面的空格符删去.

4.patch代码需要包含新的对应的测试代码,来证明你的patch的可行性.

5.patch的一般命名规范,issue序号+.00提交次序+.patch.类似如下:

OK,主要是以上的4点要求.

如何让Commiter采纳你的patch

当你把patch提交到开源社区的时候,一般Commiter会关注到你的issue,然后可能会迟些时间review你的patch,如果他认为不错,会给你提出意见,叫你修改patch代码,你应该积极响应commiter的回复,及时进行patch的更新,这会让人家对你产生好的印象,如果出现了下面类似+1的评语,代表他已经认同你的patch代码,基本上可以被合并进主干代码了.

OK,这基本就是代码提交的整个流程了,其实并不复杂,但是可能周期会比较长,因为代码必须要经过多次修改.

总结

最后希望作为国内的诸多程序员,能够向开源社区多做贡献,提升我们自身的影响力,毕竟这些东西目前都是外国的在做,不拘束于只是为了赚钱.下面放出我自己最近提交的2个issue给大家作为参考:

1.https://issues.apache.org/jira/browse/HDFS-9303

2.https://issues.apache.org/jira/browse/MAPREDUCE-6499

还有关于Yarn方面代码的分析请点击链接https://github.com/linyiqun/hadoop-yarn,后续将会继续更新YARN其他方面的代码分析。

作为一名非Commiter,如何向开源社区提交自己的代码相关推荐

  1. 如何给DPDK开源社区提交补丁

    前言 先沐浴一下DPDK的官方语言: DPDK is an open source project, with the main code BSD licensed and Linux kernel ...

  2. 红帽技术开放日:参与开源社区不只有贡献代码这一种方式

    红帽(Red Hat)是全球最大的开源软件公司,今年是红帽建立25周年,适逢LC3大会在北京举办,6月28日和29日红帽举办了开源社区开放日和媒体交流会,和大家分享红帽的最新消息,并探讨了如何建设开源 ...

  3. github提交代码命令(向开源社区提交代码)

    #若没有添加远程地址,则添加,取名如upgrade git remote add upgrade https://github.com/apache/druid.git 拉取远程最新代码upgrade ...

  4. 现阶段为什么国内程序员无法很好的参与到开源社区?

    前言 早在2年多前,笔者曾写过一篇关于如何参与到开源社区的文章:作为一名非Committer,如何向开源社区提交自己的代码,但是现在笔者重新阅读这篇文章,发现与其讲述的参与开源的方法论,还不如帮大家仔 ...

  5. 如何加入Apache开源社区:Apache ServiceComb (incubating) 微服务开源项目实例讲解

    近期,热衷开源和微服务的伙伴们非常关注如何加入到 微服务 开源项目 Apache ServiceComb (incubating) 社区.Apache ServiceComb 作为开源的Apache软 ...

  6. 从黑客文化看区块链开源社区的自我组织与成功之道

    来源 | 链闻 ChainNews 撰文 | 李画 原书作者 | 埃里克·斯蒂芬·雷蒙 出品 | 区块链大本营(blockchain_camp) 「要尊重能力,要珍视和捍卫自由.」--罗伯特·安森·海 ...

  7. linux开源社区贡献代码,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且代码已经合并到内核...

    最近国外社区 Reddit 上有个非常有趣的讨论 ,  在过去发布的Linux内核中有处代码改进是名4岁的小萝莉提交的. 这名小萝莉向内核提交代码以修复某处「漏洞」,这次代码修订还是在 2014 年发 ...

  8. 对话MVP | 柳贵:在FISCO BCOS,我体会到了开源社区的精神

    " 别人答疑,我也应为别人解惑,这是我保持热情最重要的原因之一.成功帮别人解决了问题,我也尝到了 "传道授业解惑"的那份快乐. -- 柳贵 开源社区成立以来,吸引汇聚了许 ...

  9. 开源项目贡献者_我如何从一名贡献者转变为一个开源项目维护者

    开源项目贡献者 by Dhanraj Acharya 通过Dhanraj Acharya 我如何从一名贡献者转变为一个开源项目维护者 (How I went from being a contribu ...

最新文章

  1. Immutable 想破坏它也没办法
  2. lambda List实现某列去重的解决方案采用扩展方法
  3. java ide排名_Java程序员的困惑,Java IDE到底怎么选
  4. iloc,ix和loc有何不同?
  5. Spring Cloud微服务实战:手把手带你整合eurekazuulfeignhystrix(附源码)
  6. macOS 开发 - Command Line Tool 命令行工具
  7. 学习信息安全技术心得
  8. Photoshop CC 2018安装破解
  9. 面试题:Redis 40 道
  10. 川大网页多媒体设计【李天翼班】资料整理
  11. CSDN问答标签技能树(一) —— 基本框架的构建
  12. 【python】Python语言程序设计/嵩天老师入门课程笔记整理
  13. 企业邮箱支持通过手机号登录邮箱
  14. php 图片抠图,php 图像处理 抠图,生成背景透明png 图片
  15. 成为数据库专家必读书目推荐
  16. java的Date类的getYear(),getMonth()等函数过时
  17. python 读取邮件
  18. matlab humoments,应用于数字图像识别的Hu矩缩放不变性分析
  19. leetcode热题HOT100汇总——java题解已完结撒花
  20. Java线程异步调用使用的最好的方式

热门文章

  1. 探索:制药厂系统网络时钟同步(NTP时间同步服务器)
  2. 语音识别是不是人工智能?
  3. ROS:*.bag.active恢复
  4. 雨听 | 英语学习笔记(十一)~作文范文:公园的免费入口
  5. diagram使用(BLOCK DIAGRAM)
  6. 简述计算机桌面背景更换的流程,苹果电脑桌面壁纸怎么更换【详细步骤】
  7. cJson使用的简单例子
  8. 几种最小二乘法及python代码:ELS、TLS、RLS
  9. PLSQL创建表空间的方法
  10. 【哈佛大学:计算生物学 生物信息学】学习记录(二)