參與開源項目或規范使用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
關於開源
源碼中的測試類都是相關功能的開發者提供的,所以對於了解測試新功能有很好的幫助