`
gavin_sw
  • 浏览: 2787 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何加入一个开源项目?

阅读更多

这不是一篇权威的指南,只是一些你需要遵循的基本规则,这些规则可以让你对开源项目的贡献使得你和项目维护者都感到愉快!

为什么加入一个开源项目?

首先,有很多加入开源项目的动机。排在第一的可能是“酷”:)当你告诉你的朋友“嘿,我在XYZ项目开发团队! 我很潮吧?”

但是这并不是一个很好的原因。加入一个开源项目的首先需求是你需要使用它。如果你自己不会实际使用,那么就不会有很强的动机去加入一个项目。

其它一些加入开源项目的原因可能是:

  •     获得写权限,将你自己的特性或者bug修订加入到基础代码中;
  •     你认为自己能够对项目带来很大的提升;
  •     你有很多空闲时间:)


初始方法

因为如下两个原因,第一次加入一个开源项目可能需要慎重对待:

首先,没有标准的方法,没有“加入此项目”这个按钮。你需要直接联系项目的所有人(或者维护人),同他交谈。

对起步者来说,另外一个可能导致加入过程有点困难的事情是缺少课题。

在你尝试加入一个开源项目之前,你应该尝试自己启动一个项目。即使这仅仅是一个小项目或者只是一个Lib库,或者是一些简单但有用的东西,然后在你自己的Blog或者社交网站上宣告项目。如果你幸运的话,一些人会发现项目的价值,然后开始使用它。

通过做这件事情,你将学会两件事:首先是如何运转一个开源项目,其次是你的发明被很多其他人使用时是什么样子。当你意识到可能有成百上千的人使用你的代码,有的人检视它并反馈意见、想法、补丁包给你的时候,这是一件很令人激动的事情。

除了这些,你也可以看到社区是如何运转和发展的,你将开始从不同的环境不同的角度来看你的项目。

它将为你打开新的视野!

即使你已经做了这些事情,或者感觉自己已经做好无论如何都要加入一个开源项目的准备,也还有其它前提条件:

    你必须熟悉掌握项目使用的VCS(Version Control System)工具。例如,如果项目使用Subversion(SVN),你必须知道如何提交、合并、回退、修补等等
    你必须知道可读的代码和文档的重要性
    你必须知道如何注释你的代码

如果你觉得所有这些你都没有问题,第一步就是开始“玩”项目:将代码Checkout,然后一头扎入代码中,去学习代码如何工作以及代码完成什么功能。

同时也要关注项目使用的编码风格,你不需要完全按照当前项目维护者那样编码,但至少要保证是相同的风格。你需要考虑到总会有人将要阅读和修改你的代码。

就像有人说的:编码的时候你要想象那个最后维护你代码的人是一个知道你住在哪里的暴力精神病患者!

当你感觉已经做好要加入的准备,你可以进入下一步:联系项目维护者!

初步联系

如果你准备运行自己的开源项目,你可能已经有了一个如何让你的Email被尊重和别人看到Email的时候如何想的好主意。

这个不是什么高深复杂的事情(原文为rocket science):

    这个家伙加入了许多开源项目,而且可能在项目中担任全职工作,所以Email要短、要令人愉快。
    这个家伙根本不知道你是哪根葱。所有运行开源项目的家伙至少知道一件事情:好心未必有好报(Hell is paved with good intentions)。
    展示你项目有关的知识,而不是你的激情。换句话说,向项目所有者证明你具有成为项目一部分的资格。如果你加入了,你有足够的时间来展示你的动力和激情

好的,我已经加入了,现在干嘛?

根据经验,有两种类型的人将加入开源项目:一种是推动项目前进的人,一种是不会推动项目前进的人。

与展示实际的资格相比,那些不会推动项目前进的人总是更加倾向于展示自己的激情。他们加入项目,然后从不提交任何东西,或者提交新的代码,或者提交新的功能,因此也不会带来任何Bug。

当加入一个项目的时候,问问自己是否有足够的动机去实际做一些事情是重要的,但不要做得太多也同样重要。

一个新的程序员在某种意义上来说有点像一个新的经理,要想成功,必须具备相似的品质。

一个真正优秀的经理将谨慎的接受一个新的工作职位。即使他的最终目标是将公司颠覆过来和优化整个流程,他也会以完美的模仿前任经理来作为开始。

为什么?

设身处地的想象一下:如果你是新经理的下属,或者新经理的上级,他们得到一个新的经理:

A经理:加入公司,试图将公司业务颠覆过来,打破正在运行的流程,阻止人们进行工作。但是经过一些列的困难工作后,前景将如此美好!

B经理:加入公司,完美地深入细节地工作,同时给工作流程带来小的增量的改进,最终起草并向上级提交详细、完整、通过颠覆原有流程来优化的计划。

谁将有更大机会获得成功?

很明显是B经理,因为首先他通过带来一些微小的改进来证明他更有竞争力,然后在他尝试去实施大的改进之前,提交一个清晰和完整的计划。

给一个开源项目带来很大改变不是不可能的,但首先你要证明你能够完成它。

一个成功的开源项目很像一个成功的商业:如果不毁灭它,那么很难带来很大的成功的改变。

所以特别小心你的大的改变。

事实上当加入一个开源项目后最好的开始的地方是非常基础的:在那些你只会带来很小危害的地方开始!

改进项目的文档或者注释、添加单元测试、或者做一些检视,这是一个了解项目、项目的缺点、项目的优点的好机会。项目维护者非常乐意你做这些,这也是获得他们的信任以及展示你是认真帮助项目的好机会。

创建你自己的分支也是一个好主意,这样你就是在一个沙箱(译者注:供儿童在其中玩耍的一个环境,类似于在海滩上堆城堡,可以随便推到从来,也不会带来什么危害)环境中,对项目来说,这样你就几乎没有可能做错事或者破坏项目。

尽管将主干版本合并到你的分支,这样就可以使得你的代码与时俱进。

政治环境

我不认为有任何成文的规定,但是你必须知道一些关于大部分开源项目的一个重要的事情:

没有民主!

随便你怎么说,但最终只有一个权威:项目所有者。

不喜欢这样?忘掉它吧(原为是Fork it)。


原文地址: http://www.cnblogs.com/Cmpl/archive/2011/07/05/2098507.html

 

分享到:
评论

相关推荐

    90几套Unity开源项目.txt

    根据提供的文件信息,...综上所述,Unity开源项目为学习者提供了一个宝贵的学习资源库,无论是对于初学者还是有一定基础的开发者而言,都有着不可替代的价值。通过合理利用这些资源,可以加速个人技能的成长和发展。

    Java最著名的开源项目

    ### Java最著名的开源项目 #### 引言 Java作为一门广泛应用的编程语言,在软件开发领域拥有着庞大的生态系统。其中,开源项目的贡献对于推动Java技术的发展起到了至关重要的作用。本文将介绍一些Java领域内最著名...

    Java项目开源源码2023最新资源

    对于提供的"Java项目开源源码2023最新资源.docx"文件,这是一个可能包含项目列表、介绍或指南的文档。打开这个文档,你可以找到具体的项目链接,从而开始你的学习之旅。务必充分利用这些宝贵的资源,它们将是你成为...

    开源项目-GoogleCloudPlatform-agones.zip

    Agones 是一个由 Google Cloud Platform 支持的开源项目,专为在 Kubernetes 上构建、管理和扩展多人在线游戏(MMO)和实时多人游戏(RTS)的专用游戏服务器而设计。该项目旨在解决游戏行业在云环境中面临的挑战,如...

    人人开源项目

    【人人开源项目】是一个基于Java技术栈的权限管理系统,它主要使用了SSM(Spring、SpringMVC、MyBatis)框架,这是一个经典的后端开发技术组合,广泛应用于企业级应用开发。该项目的设计目的是提供一个可参考的权限...

    23个.NET开源项目

    ### 23个.NET开源项目:深度解析与应用价值 #### 测试框架 - **xUnit.net**:作为测试驱动开发(TDD)的核心之一,xUnit.net为.NET平台提供了强大的单元测试支持,其设计简洁而高效,适用于各种.NET应用程序的测试...

    开源项目-Vaultpls-Gwitch.zip

    本文将深入探讨一个名为“Gwitch”的开源项目,它是针对Twitch聊天框架的开发工作,尽管目前仍在进行中(WIP,Work In Progress)。通过分析其核心功能和潜在应用,我们可以一窥这个项目对直播互动领域的贡献。 ...

    如何参与开源项目.pdf

    选择一个合适的开源项目对于首次参与的开发者至关重要。以下是一些寻找开源项目的建议: 1. **根据兴趣和技术栈选择**:考虑自己的兴趣和技术专长,选择与之匹配的项目。 2. **浏览GitHub Explore页面**:GitHub的...

    开源项目-gombadi-dnsseeder.zip

    【开源项目-gombadi-dnsseeder.zip】是一个开源项目,其主要功能是通过Go语言实现多网络(包括twister和bitcoin)的DNSSeeder服务。DNSSeeder是分布式系统中的一个重要组件,它允许新用户或者客户端在加入网络时快速...

    国内负责的ICANN开源项目RestfulWhois.zip

    ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构是一个非营利性的国际组织,成立于1998年10月,是一个集合了全球网络界商业、技术及学术各领域专家的非营利性国际...

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    2D板材排版套料开源代码

    同时,这个项目也可以作为一个基础,进一步定制化以满足特定的业务需求,例如加入更多类型的切割技术限制或者优化目标。 总的来说,2D板材排版套料开源代码展示了如何利用遗传算法解决实际工程问题,提供了优化材料...

    开源项目-omeid-thunder.zip

    "omeid-thunder"是一个开源项目,其名称中的"Thunder Bolt"暗示了它可能与高性能、高效率有关。"Bolt"通常与速度和力量相联系,在IT领域中,这可能意味着该项目专注于快速处理或传输数据。从描述中的"High ...

    开源项目-osrg-gobgp.zip

    开源项目-osrg-gobgp.zip是一个包含Go语言实现的边界网关协议(BGP)的开源项目。Gobgp,全称为Go Border Gateway Protocol,是由OSRG(Open Source Routing Group)开发并维护的一个强大且灵活的BGP实现,旨在提供...

    开源项目源代码,学习自取

    6. **参与社区**:加入开源项目的社区,可以与其他开发者交流,共同解决问题,提升个人影响力,甚至可能获得工作机会。 在提供的"开源项目"压缩包中,可能包含了不同领域的项目源码,比如Web开发、移动应用、数据...

    开源项目-teambit-bit.zip

    【标题】"开源项目-teambit-bit.zip"指的是一个名为TeamBit的开源项目,其核心是位组件管理器。这个管理器旨在实现跨语言的组件管理,为开发者提供了一个统一的平台来处理不同编程语言中的代码模块。 【描述】描述...

    跨平台(Android,iOS,web)的 IM 开源项目.zip

    本文将深入探讨“跨平台(Android,iOS,web)的 IM 开源项目”,重点关注其在Android平台上的实现,以sealtalk-android-master为例进行解析。 一、跨平台IM系统的架构与设计 跨平台IM系统的核心是实现多终端间的实时...

    GitHub 的开源项目:绝版游戏保护工程.zip

    【标签】:“github开源小游戏”表明该项目是基于GitHub平台的一个开源项目,主要关注的是小型游戏,尤其是那些已经不再被官方支持或者商业运营的小游戏。开源意味着代码公开,允许全球的开发者参与修复、改进或者...

Global site tag (gtag.js) - Google Analytics