1. 到 Apache Spark 的github 页面内点击 fork 按钮

2. 你的github帐户中会出现 spark 这个项目

3. 本地电脑上, 使用

git clone [你的 spark repository 的 github 地址]
例如:
 

本地得到一个叫 spark 的文件夹

4. 进入该文件夹,使用

 添加 Apache/spark 的远程地址

5. 使用

git pull upstream master

得到目前的 Apache/spark 的最新代码,现在我们在 你自己fork的Spark代码仓库的master 这个分支上,以后这个分支就留作跟踪 upstream 的远程代码

6.好了,现在你可以开始贡献自己的代码了

按照开发惯例,我们一般不在自己代码仓库的master上提交新的代码,而是需要为每一个新增的功能或者bugfix新增一个新的branch。使用:

git checkout -b my_change

创建新的分支,现在我们可以在这个分支上更改代码

7. 添加代码,并提交代码

git add *
git commit -m “message need to be added here”

8. 提交Pull Request 前合并冲突

在我们提交完我们的代码更新之后,一个常见的问题是远程的upstream(即apache/spark)已经有了新的更新,从而会导致我们提交Pull Request时会导致conflict。为此我们可以在提交自己这段代码前手动先把远程其他开发者的commit与我们的commit合并。
切换到我们自己的主分支,使用

git checkout master

拉出apache spark的最新的代码。

git pull upstream master

切换回 my_change 分支并合并master上的更改到当前分支,使用

git checkout my_change
git rebase master

然后把自己在my_change分支中的代码更新到在自己github代码仓库的my_change分支中去:

git push origin my_change

将代码提交到自己的仓库。

 。大家可以多参考其他committer提交的PR。

10. 等待Spark committer审核你的PR。

如果需要进一步的代码修改,你可以继续在本地的my_change分支下commit新的代码,所有新的代码会在”git push origin my_change”之后自动被加入你之前提交的Pull Request中,方便进行问题的跟踪和讨论。

11. 如果一切顺利,具有apache/spark.git 写权限的commiter就会把你的代码merge到apache/spark.git的master里面去了!

恭喜你!相信你一定很开心吧?

Happy contributing to Spark!