{如何加入开源项目的小手册}

标签: 日志 patch 开源 | 发表时间:2011-03-24 13:27 | 作者:Tomasen 建江
出处:http://blog.splayer.org

参与开源项目,可以快速提高自己的技术水平,学到很多学校中学不到但在工作中会非常有帮助的技巧。一份参与过开源项目的履历,也越来越受到用人单位的重视。所以最近几年,我们技术爱好者对开源项目投入的关注是越来越多了。可仍会看到很多对开源项目充满兴趣和热情的同学,用了错误的方式方法以至于不得其门而入。这段时间我特意将自己的心得整理了一下,供爱好者参考。

第一阶段:看和学

在和一些开源爱好者的接触过程中,我发现很多人都对自己关注的项目缺乏技术层面的理解。不论是对功能、代码或者项目的设计方向都很模糊,甚至大部分连代码都没有下载编译过。我想提醒爱好者的是,参与开源项目并不是靠一个简单的意愿就可以驱动的进程。阅读项目代码和了解设计脉络是必须的!

从小处着手:尝试修正bug/issue

绝大部分面向公众开放的开源项目都有issue区或者bug tracker。所谓issue区,也就是问题汇总。对项目有兴趣的爱好者,与其漫无目的开始,不如在issue/bug中先找到一个自己感兴趣的小问题,作为第一个目标并尝试解决它。

制作patch

patch又叫做补丁。是用来修补代码的文本文件。一个典型的patch文件例如:

--- clinkcc.orig/configure.in 2005-11-14 18:08:07.000000000 +0100
+++ clinkcc/configure.in 2005-11-14 18:08:13.000000000 +0100
@@ -150,6 +150,7 @@
AC_CHECK_FUNCS([iconv])
+AM_ICONV

可以看到patch文件是对修改前和修改后文件进行了比较,并将有差异的部分记录在文件中。例如使用命令行工具diff来制作的patch:

diff -u oldFile newFile > mods.diff

很多可视化版本管理工具本身也自带制作patch的功能。
通过小巧的patch,项目管理者可以快速的看到修订内容并进行评估。如果没有patch,项目管理者就很难对修改做出是否可用的判断。所以为了不浪费双方的时间,掌握制作patch的专业技巧也是必须的。

熟悉版本管理系统

开源项目中使用的版本管理系统的种类越来越多。除了被淘汰的cvs、传统主流的svn,新的版本管理体系例如Git和Mercutial(Hg)越来越流行。系统越来越多,确实增加了开发者的学习成本。但也只有掌握版本管理系统,才有可能和其他项目开发者并行开发并进行友好的协作。因此在完成第一个issue的阶段,也是摸熟版本管理工具的好时机,要好好把握。

代码规范

现代的各大开源项目对代码规范的要求越来越严格。在几十人以上和近百万行代码的项目中,必须依赖代码规范来保证代码的可读性。所以在撰写代码时,一定要注意是否符合该项目中对代码规范的要求,以免被退票。

遵守规则

一些大型项目中,可能还有除了代码规范之外的项目规则。一定要仔细阅读清楚主页或开发者社区的相关说明,以避免不必要口舌。

更进一步

联系项目管理者

当有一些可能带来重大改变的想法时,务必要先和项目管理者保持良好的沟通。通过email或邮件列表或irc将你的想法描述清楚。获得项目管理者和项目中其他开发者的认同和帮助是一个关键。附带提一句,初次联络时,务必不要忘记自我介绍,这并不仅仅是礼貌,更是建立信任的主要基础。

成为固定成员

通过积累patch和建立信任的阶段之后,通常管理者都会主动邀请你成为固定的开发成员。对于这个问题,我的建议是保持良好的心态,该来的自然会来。

建立新的分支或Fork

Fork是我认为很难翻译的词。Fork的原意就是餐具中的叉子,没有任何褒贬的倾向。在开发者的世界,可以将它理解为师出同源的几个叉子尖。当你对项目有一个“狂野”的想法时,项目管理者可能并不愿意在项目中看到这样的实验性分支。这时就可以fork一个分支项目,来实现自己的想法。尤其是git和hg大流行的背景下,fork后再merge back变得很容易,所以fork对项目的维护负担也减小变得更容易被接受。

时间管理

绝大部分参与开源项目的开发者都是利用业余时间来撰写代码的。所以良好的时间管理,才能帮助你有效的达成目标。近年来开源项目的技术规格越来越高,有一个预先制定的时间表,更能帮助你准备好一个良好的心态而不至半途而废。只要用心和持之以恒,你就会受到关注和尊重,甚至是雇主的重新评估乃至嘉许。

希望这篇小手册可以帮更多开发者轻松的参与到更多国际化的开源项目中。也欢迎随时关注射手的开源项目 http://hg.splayer.org/splayer/

相关 [开源 项目] 推荐:

Android优秀开源项目

- - CSDN博客移动开发推荐文章
Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习. 今天爬爬把自己熟悉的一些开源项目整理起来,希望能对 Android开发同学们有所帮助. 另外,如果你有比较好的项目推荐,也烦请在评论里分享出来,我会定期更新博客内容. Apollo音乐播放器:就一个播放器,但是实现的很好.

开源项目之NeoCrypt

- - CSDN博客推荐文章
一个文件加密解密软件的源代码,可以设置很多著名的加密算法进行加密解密. 它集强力、安全的算法和简单、易用的界面于一身. 它的文件管理界面可以轻易地观看和更改整个系 统的加密设置,也可以加/解密选定的文件,安全地删除文件. 项目需要用到第三方库cryptlib,该库已经放到源码包中. 本程序有一个动态链接库NeoCryptSX与一个主程序Neocrypt组成,NeoCryptSX动态库操作简单,只负责发送调用消息,Neocrypt主程序中封装了Decryptor类负责解码、Encryptor类负责编码,File类负责文件操作、CProgUpdater类负责进度等.

开源项目 AllJoyn 初识

- - CSDN博客推荐文章
AllJoyn 高通的一个开源项目,针对IoT的. 光看到介绍第一个感觉就是高大上啊. 它要解决的问题是物联网中互联互通的问题,一个好大平台. 从它介绍的PPT的两张图比较一下就会比较清楚了. 第一张图中它描绘的是现状,各个设备厂商虽然都对外提供了物联网接口,云接口,但各个设备没有互联互通,各自为政,群雄割据.

Google正式开源LevelDB项目

- Jie - 新闻 - LUPA开源社区
  Google 宣布 LevelDB 项目开源,使用的开源授权协议为 BSD.   Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功.

晒晒我的开源项目们

- zffl - 透明思考 - Thoughts
在等“bundle install”的时候闲着没事,打开 我的Github ,发现还有那么一些东西值得分享一下的. 啤酒游戏 :《 第五项修炼 》里讲的啤酒游戏. 合作的进化 :这就是《 合作的进化 》那本书里讲的生存竞赛游戏. 可以自己写新的策略放进来,看看重复囚徒困境中的最佳策略是如何被选择出来的.

如何熟悉一个开源项目?

- - IT技术博客大学习
       你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西.     1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解.     2.阅读项目的文档,重点关注类似 Getting started、Example之类的文档,从中学习如何下载、安装、甚至基本使用该项目所需要的知识.

OpenStack – 开源云计算项目

- - 弯曲评论
系列目录 Future Internet Technology. OpenFlow – 打造弹性化的可控互联网. Open vSwitch – 开放虚拟交换标准. Mininet – “懒惰”网络研究者的福音. NOX – 现代网络操作系统. OpenStack – 开源云计算项目. 时下云计算如火如荼,众多企业纷纷推出云计算相关的应用,不少还搭建企业私有云和少数公有云(代表为Amazon).

2012年五大开源项目

- - 创意科技 - 果壳网
如果一切照计划运行,明年红帽公司(Red Hat)将成为第一家年收入超过10亿美元的开源软件企业,这将是开源社区历史上一个重要的分水岭,开源开发人员一向认为基于社区的开源开发模式非常的具有可行性,甚至比闭源开发更优越,将替代传统开发模式,成为将来软件开发模式. 近几年,诸如Linux,Perl, Apache, Hadoop, OpenOffice, GIMP等数十开源项目在软件市场上如鱼得水,新的一年,又有什么项目会脱颖而出.

晒晒我们的开源项目

- - robbin的自言自语
我们的研发团队是一支mini型研发团队,目前共有研发人员13人. 由于网站产品维护的历史原因,这13人的研发团队分为4支小组,分别是:Ruby研发小组5人;PHP研发小组4人;.net研发小组2人,Java搜索小组2人. 别看我们研发人员这么少,但是我们研发人员战斗力很强,我们维护和开发着十多条产品线.

Google code android开源项目(四)

- - CSDN博客推荐文章
一个简洁的android rss阅读器. 创建者写的一些应用包括:闹钟和调节屏幕亮度小工具等. 远程控制winamp(5.5以上版本).  Tesseract OCR(HP实验室开源的)封装的 Android APIs. 使用 visual studio 开发Android NDK C/C++ . android版quake2.