GitHub 開(kāi)源庫(kù)
GitHub 上好的開(kāi)源庫(kù)很多,或多或少我們都對(duì)某些項(xiàng)目的源代碼感興趣,有時(shí)候甚至想要為這些倉(cāng)庫(kù)改改 Bug,或者添加一些實(shí)用的新特性,成為倉(cāng)庫(kù)代碼貢獻(xiàn)者中的一員。那么本節(jié),我將會(huì)為大家介紹一下向開(kāi)源庫(kù)貢獻(xiàn)代碼的流程。
1. 了解項(xiàng)目
首先你要先了解這個(gè)項(xiàng)目,先看下 Readme 文檔里面的項(xiàng)目簡(jiǎn)介,有哪些主要的 api。最好再多看看源碼,研究一下作者的代碼風(fēng)格,畢竟向別人的倉(cāng)庫(kù)提交代碼還是得遵循別人的代碼風(fēng)格。項(xiàng)目中有測(cè)試的話,可以讀一下測(cè)試用例,通過(guò)測(cè)試往往可以更加清楚地知道每個(gè)函數(shù)的功能,對(duì)項(xiàng)目有個(gè)大致的了解。
2. 明確目的
明確你要提交代碼的目的,是自己在使用過(guò)程中發(fā)現(xiàn)了項(xiàng)目里面的某個(gè) Bug 呢?還是看到 issue 里面有個(gè) issue 自己知道怎么修復(fù)?抑或者是想添加一個(gè)有用的新特性?明確好目的,然后有針對(duì)性地解決。
3. fork 源項(xiàng)目
一般情況下,別人的倉(cāng)庫(kù),我們是沒(méi)有權(quán)限直接向他們的分支提交代碼的,所以要先 fork 到自己的倉(cāng)庫(kù),如下圖以著名的前端 UI 組件庫(kù) ant design 為例,點(diǎn)擊圖中按鈕即可 fork,可以看到,該倉(cāng)庫(kù)目前已經(jīng)有 22k 次 fork 了。
fork 之后,可以到自己的倉(cāng)庫(kù)列表下面看看是否有了一份項(xiàng)目代碼,如圖
4. 本地開(kāi)發(fā)
4.1 同步原項(xiàng)目代碼
先將剛才 fork 的代碼,clone 到本地,添加原項(xiàng)目地址,這里說(shuō)下原因:大多數(shù)情況下,在自己開(kāi)發(fā)過(guò)程中,原項(xiàng)目也在不斷的更新,所以要添加遠(yuǎn)程項(xiàng)目地址,方便隨時(shí)和原項(xiàng)目代碼保持同步。還是以剛才我 fork 的 ant design 項(xiàng)目為例,執(zhí)行下面的兩個(gè)步驟,即可同步原項(xiàng)目代碼:
- 然后進(jìn)入到項(xiàng)目目錄,添加原項(xiàng)目地址
git remote add upstream https://github.com/ant-design/ant-design.git
- 獲取最新代碼
git pull upstream master
4.2 創(chuàng)建分支
大多數(shù)情況下,我們不會(huì)直接修改 master 分支,而是根據(jù)修改的內(nèi)容新建分支,比如你是想修改 bug 則可以創(chuàng)建一個(gè) bugfix 分支,你是想新增特性,可以創(chuàng)建一個(gè) feature 分支,分支取名最好有意義,而且簡(jiǎn)潔,例如可執(zhí)行如下命令:
git checkout -b bugfix
接下來(lái)我們就可以在新分支上修改代碼,修改完成后提交 commit 到代碼庫(kù)。
4.3 合并修改
上面說(shuō)過(guò)了,當(dāng)你修改完成的時(shí)候,原項(xiàng)目代碼可能已經(jīng)更新過(guò)了,所以在這里,就需要我們同步一次,不然到時(shí)候合代碼可能會(huì)產(chǎn)生沖突而不允許合入。
首先切換到 master 分支,執(zhí)行如下命令:
git checkout master
然后,同步最新的遠(yuǎn)程代碼:
git pull upstream master
然后切回到 bugfix 分支:
git checkout bugfix
把 master 分支的最新 commit 合并到 bugfix 分支:
git rebase master
最后,就可以把現(xiàn)在的代碼 push 到遠(yuǎn)端的 bugfix 分支了:
git push origin bugfix
4. 提交 Pull Request
可以進(jìn)入到你自己的遠(yuǎn)端項(xiàng)目主頁(yè),點(diǎn)擊 New pull request
按鈕,然后選擇你的 bugfix 分支和原項(xiàng)目倉(cāng)庫(kù)的 master 分支,提交申請(qǐng),等待作者進(jìn)行代碼 review 并合并,如果 review 不合格,作者會(huì)提示你修改,按著作者的已經(jīng)修改好后重新提交代碼即可。
5. 小結(jié)
通過(guò)本節(jié),我們學(xué)會(huì)了如果向開(kāi)源庫(kù)提交代碼,多給開(kāi)源庫(kù)做做貢獻(xiàn),學(xué)習(xí)大佬們的代碼風(fēng)格,對(duì)技術(shù)提升和職業(yè)生涯都有很多好處。很多大型互聯(lián)網(wǎng)公司都把你在 GitHub 向開(kāi)源社區(qū)做的貢獻(xiàn)作為加分項(xiàng),找工作時(shí)簡(jiǎn)歷和面試都會(huì)加分不少。