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

前言

作为一名职业程序员,如果去除待遇,薪资等等的因素考虑,从纯技术的角度出发,如何才能达到一个比较高的境界呢,答案是与最顶尖的那一批人交流合作,当然,最顶尖的那批人很多几乎估计都不在身边,而且大多在国外。那么难道就没有办法了吗,不是的,不要忘了还有网络这个东西,可以通过社区,邮件进行交流,提出自己的想法。这些人往往活跃于许多开源社区,比如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其他方面的代码分析。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 04:50:58

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

开源社区提交patch的工作流程分析

首先来看patch的生命周期. 首先是如果你有一个idea,你可以先在社区里与大家讨论,进入RFC(request for commit)阶段,如果直接就去实现自己的idea,可能提交到社区大家并不接受,或着与社区的要求不一样,或者别人也在做这个,自己做重复了,都是应 该避免的,所以先在社区里与大家讨论你的idea是必要的.OK!如果大家通过讨论同意了你的idea,你就可以去hack了,当然了,大家会对idea 提出一些意见和建议,你要相应的进行采纳.然后把代码贴出来在社区里,此时大家会对你的c

纪念我第一次为开源社区贡献的代码

最近由于继续做在职研究生的毕业论文,在openstack上下了一些功夫,做了一个基于openstack的弹性扩展的小程序,中间需要调用Ceilometer的API接口对虚拟机的cpu使用效率做监控.试用了几乎所有的openstack的java API开发包,其中jclouds没有Ceilometer的API接口,openstack-java-sdk的Ceilometer支持很差,基本无法使用,所有最终选择了openstack4j.它的API还是比较好用,底层用了jersey.但是在调用Ceilo

JEECG开源社区第六期架构培训班开始报名

JEECG开源社区架构师培训班 ******************************************* 教学特点 学原理,写架构,非学框架,用框架 ******************************************* 教学方法 老师带着你学习编程,每个技术课题,会有对应的视频和作业. 同学以自学为主,遇到问题找老师解答. 每个课题,需交作业,作业完成既可进行下一课题学习! ******************************************* 学

如何建立开源社区

对一个开源项目来说,社区是至关重要的.活跃而强大的社区无疑是项目的心脏.然而,只有开源许可是不足以吸引用户和开发者参加项目并共同建立社区的.本文介绍如何建立一个成功的开源社区. 为什么启动开源项目? 事实上,启动开源项目与启动其他类型的软件项目并没有什么不同.开源项目的启动,或者是因为某人想开发某个软件,或者是在产品开发中,某人想满足别人的未来需求.在前一种情况下,开发者可能永远不会考虑共享最终成果,而在后一种情况下,开发者会出于某种目的而共享软件. 什么是社区?为什么开源项目要建立社区? 社

Linux已经完全统治了这个世界:反对开源社区愚不可及

原文来自:http://readwrite.jp/archives/9977 无论一个企业多强大,它都不存在和开源社区抗衡的实力 十年前,Unix占有最快的计算机世界排名前10位的五席,以及超级计算机市场的44%.现在怎么样了呢?以往那些凭借着处理能力地位难以撼动的Unix已经被 Linux取代了其位置,别说世界上最快的计算机前十名,就是前50名也没有UNIX的影子. 社区:隐藏的性能助推器 人们并不都是很清楚的意识到社区的有效性.1999年,SUN公司的首席执行官Scott Makuneri对

重磅新闻,Calfbbs经典开源社区系统发布!

首先一提到论坛或者社区,大家首先想到可能是Discuz论坛,毕竟Discuz已经在中国有十几年的历史,见证了无数草根站长的崛起.但是随着Discuz被腾讯收购后,已经没怎么更新.移动端做的也不怎么好,后台管理更是复杂,作为一个多年的程序员,我竟然不会操作Discuz的后台,还得去看视频教程才能学会.如此种种,让我们有了研发新开源社区的想法. 首先.它的界面要足够简洁.操作要简单.功能可以不必太多,但是一定要实用.扩展性好,作为一个有技术能力的人,可以随意的增加插件.没有技术的,也可以轻松购买使用

jeecg开源社区近期版本发布计划

jeecg开源社区近期版本计划 开源项目一:jeecg(数据权限+国际化+多数据源) 开源项目二:jeewx(捷微微信管家开源版本-升级) 开源项目三:jeewx-api 基于微信接口API 开源项目四:jeewx-cms 响应式网站(兼容手机pc等)

【dotnet跨平台】谈一谈dotnet-cli开源社区的产品持续集成

?? [dotnet跨平台]谈一谈dotnet-cli开源社区的产品持续集成 进入其中一个PR:https://github.com/dotnet/cli/pull/2580 可以看到微软使用自己搭建的持续集成平台来保证产品和代码的质量,其中每一个即将整合代码到rel/1.0.0这个主分支的代码都要经过7个测试通过,其中2个windows平台,4个linux平台和一个OS X平台如下: Details Windows_NT x64 Release Build - Build finished.

500 G JAVA视频网盘分享(JEECG开源社区)

[涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] [转载:http://blog.csdn.net/zhangdaiscott/article/details/18220411] JEECG开源社区秉承开源宗旨,分享社区Java架构视频,更多资料点击: www.jeecg.org JAVA架构QQ技术群: 39596137 Jeecg开设师徒架构学习班(师傅带徒弟模式),有兴趣的可以参加学习 => 开源社区师徒架构班 1