首先要敢于迈开这一步,不用把这件事情想的很困难,即使是 spring 这种级别的项目,普通人也可以参与进来。
从小事做起,别好高骛远
有的人一上来就想着给开源项目贡献核心代码,这其实非常不现实,特别是 spring 这种级别的项目,代码需要严格要求按照官方要求来编写,并且需要编写全方位的测试用例。提交之后还要被 spring 官方层层严格审查,经常1、2个月都不一定能合并到主分支中。
所以可以从最简单的地方入手,比如文档、注释、简单的逻辑错误等。这些地方不仅容易入手,而且通过官方审核的几率也更大些,合并速度也更快。
有的人可能又要说了,这算什么,这也算贡献。的确,这些都是些小事,但如果有1万个人做了这些小事,加起来会对该项目产生巨大的帮助。
另外这些小事可以帮你入门这个项目,为之后核心代码的提交打好基础。
从工作中发现问题
虽然提倡给开源项目做贡献,但也没必须专门去研究某个开源项目,除非你特别想参与到该项目中。
像我,更多的是在工作中发现了问题,然后顺手解决一下,举手之劳嘛,人人为我,我为人人。
说了这么多是希望大家不要好高骛远,即使是很小的问题,遇到以后顺手解决一下,也是对开源事业的一种贡献。
接下来,我会通过一个非常简单的案例来展示如何为 spring 项目贡献代码。
案例
在我封装Redis 操作类的时候(参考基于 RedisTemplate 自定义 Redis 操作类),发现
spring-data-redis-2.1.11.RELEASE-sources/org/springframework/data/redis/core/ListOperations.java
下 leftPush() 方法与描述验证不符,而且给的redis的网址和命令也是错的
类似的情况还有 177行的 rightPush() 方法
刚开始和大部分人的想法一样,这种小事懒得去管,后来想了一下,可能有人会因此而产生误解,于是还是尝试着去给官方修复一下,也算是为 spring 项目做点小小的贡献。
有人可能想说不就改个注释吗,这算什么贡献!对于这种人我只想说,就是因为有你这样的人,所以这个小小的错误才一直留到现在还没有修复!
整体流程
整个过程主要分为5步
- fork 项目
- 将贡献代码提交到自己fork的项目上
- 去 spring jira 上创建一个问题,并获得唯一标示码
- pull requests 并加上唯一标示码
- 等待官方审核
fork 项目
点击 fork 就会拷贝一份当前项目到你自己的仓库
提交代码到自己fork的项目上
去自己的仓库把项目下载下来
然后在本地修改好后,提交,push到你的远端。
spring 项目对缩减等代码格式有要求,参考 Spring 项目 贡献准则 准则里面提供了格式化的工具
注意,spring 项目使用制表符缩进而不是4个空格
在 spring 官方的错误跟踪器,创建一个问题
Spring JIRA 是Spring 官方的错误跟踪器,对外开放,支持中文,注册也很简单,直接通过github授权。
创建好之后,在里面添加一个问题,尽量填写详细点,例如
之前那个方法与描述不匹配的问题已经被解决了,没法演示。这里展示的是一个新的问题。(是的,我后来又发现有注释写错误了)
创建好后会自动生成票据,如图中的红框
把它拷贝下来之后会用到
pull requests
得到 DATAREDIS-xxx 这个票据后,就可以 pull requests 了
检查你的代码,没问题就创建
最关键的一步来了,这里面提到的每一步都要仔细阅读,写的是 spring 对提交的格式和其他的一些要求
了解完条条框框后,开始正式提交
注意,红框中填写的内容要符合 spring 的要求
确认无误后提交
等待审核
提交之后等待审核
如果你是第一此贡献代码,还会要求你签署一个协议。
合并完成
你提交之后,会有人来处理,如果官方觉得没有什么问题会合并你的提交,如下
完成合并之后,主分支代码也变成你修改后的样子,然后该项目的贡献者中也会有你的名字