参与开源项目或规范使用git
作为一个coder,如何为顶级的apache社区贡献代码,成为apache contributer之一,了解规范使用gitlab是很有必要的
以下以apache flink为例,介绍如何给apache 贡献代码。
通常如下流程,你为apache贡献代码
- 遇到了一个apache项目的bug或添加一个新功能
- 如果改动较小:在 https://issues.apache.org 建一个ISSUE,一般遇到小的bug或问题可以在issue列表查一下是否已存在,如果有的话可以参与或跟进;
- 如果改动较大:最好发一个讨论邮件,并开启一个FLIP (Flink Improvement Proposals)在 https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals,大家经过讨论之后,最后发起投票,在有3个committer通过之后,就可以自进入开发阶段了。
- 投票通过后,就可以创建相关的issue或者子issue;
开发代码
-
fork代码
首先需要要有自己的github账号,把flink的代码fork到自己的账号下,打开https://github.com/apache/flink,
点击fork按钮,在自己的账号下就可以看到相应工程。
-
下载代码到本地
之后我们就可以把刚才fork的flink的代码下载到我们的本地,可以用下面的命令:
git clone https://github.com/xxxxxxxx/flink.git
-
添加远程仓库
远程仓库,主要是为了后续提交更新代码。
git remote add apache https://github.com/apache/flink.git
查询远程仓库命令git remote -v 可以看到有两个远程仓库。
origin https://github.com/xxxxxxxx/flink.git (fetch)
origin https://github.com/xxxxxxxx/flink.git (push)
apache https://github.com/apache/flink.git (fetch)
apache https://github.com/apache/flink.git (push)
-
添加新分支
接下来,添加一个新分支,用于开发我们的代码。
分支的名字为了方便区分和查询,可以起一个和这issue同名的分支名,
或者根据功能起一个容易好识别的分支名https://github.com/xxxxxxxx/flink/tree/xxxx
然后就可以在这个分支上开发了,
开发完成之后,需要检查一下代码的规范,现在很多的编译器可以完成代码规范的检查,比如IntelliJ IDEA 的 checkstyle
-
写测试代码
测试代码应该成为一种规范,方便对代码逻辑等进行测试;
在相关的测试类里面添加相应的测试代码,另外还应该添加功能说明或相关说明文档。
-
提交代码
因为在自己的开发过程中,flink的mastr主分支可能已经有更新,所以为了避免冲突,先把最新的代码更新下来;
切换到主分支
git checkout master
git pull apache master
之后,切回自己的分支:
# 切换到自己的分支
git checkout flink-my-branch
# 添加刚才改动的代码,如果不确定改了哪些,可以git status看一下
git add my-code
git commit -m '注释'
# 把变化的代码添加到我们的分支
git rebase
# 提交分支到自己的仓库
git push origin flink-my-branch
-
提交到社区
我们提交分支之后,就可以提交相应的PR(Pull Request)了:https://github.com/apache/flink/pulls
提交注意标题要写成 [ISSUE] + title的形式,比如 [FLINK-xxxxx] [xxx] xxxxxxx ......
这样的话就能把你这个Pull requests和issue自动关联上。
之后我们就能在相应的issue页面看到关联的Pull requests
-
合并PR
代码提交完后,会有相关的committer或者其他人review代码,
如果committer认同了你的改动,然后他就会把你的改动合并到master分支,或者是其他相应的版本分支。
-
代码贡献者的名单
list-of-contributors 中可以看到代码贡献者的名单
https://flink.apache.org/news/2020/07/06/release-1.11.0.html#list-of-contributors
关于开源
源码中的测试类都是相关功能的开发者提供的,所以对于了解测试新功能有很好的帮助