如何在Github上為開源貢獻(xiàn)力量?
參與開源的一個(gè)好方式是為當(dāng)前你正在使用的(開源)項(xiàng)目貢獻(xiàn)力量。Github為多達(dá)五百萬的開源項(xiàng)目提供托管。這里有各種技術(shù)集的項(xiàng)目,比如:recipes、 HTML/CSS、Ruby、Astrophysics和其他許多項(xiàng)目。這份指南會涵蓋在一個(gè)典型項(xiàng)目中的各個(gè)方面,同時(shí)指導(dǎo)如何參與貢獻(xiàn)。
查找項(xiàng)目
我們建議你開始時(shí)查找你已經(jīng)在使用的項(xiàng)目(或者感興趣的項(xiàng)目)。下面是一些值得訪問的鏈接:
- · GitHub Explore: 當(dāng)前熱門項(xiàng)目和有潛力的項(xiàng)目.
- · GitHub Stars: 項(xiàng)目由他人評價(jià)的排行榜.
- · GitHub Showcases: 查找相關(guān)的倉庫.
- · LayerVault News: 前端和設(shè)計(jì)項(xiàng)目.
一個(gè)典型的項(xiàng)目
下面是在一個(gè)開源項(xiàng)目中可能會訪問的一些元素。
社區(qū)
項(xiàng)目通常都含有一個(gè)圍繞它的社區(qū),由其他不同角色用戶創(chuàng)建:
- 所有者是項(xiàng)目創(chuàng)建者或其組織,該賬戶身份擁有這個(gè)項(xiàng)目。
- 維護(hù)者和協(xié)作者是一個(gè)項(xiàng)目的主要開發(fā)者和負(fù)責(zé)駕馭項(xiàng)目開發(fā)方向的人。通常項(xiàng)目所有者和維護(hù)者是同一個(gè)人。他們擁有倉庫的寫權(quán)限。
- 貢獻(xiàn)者是指任何對項(xiàng)目進(jìn)行pull操作并合并到項(xiàng)目中的人。
- 社區(qū)成員是經(jīng)常使用項(xiàng)目的用戶,深切關(guān)心項(xiàng)目并且活躍討論項(xiàng)目的特性和pull請求。
文檔
項(xiàng)目中包含的通用文檔文件
請讀我(Readme)
幾乎所有Github上的項(xiàng)目都包含一個(gè)README.md文件。這個(gè)Readme描繪了項(xiàng)目使用、編譯,有些時(shí)候也提供項(xiàng)目參與的詳細(xì)地圖。
參與文檔(Contributing)
不同項(xiàng)目和項(xiàng)目的維護(hù)人員存在差異,所以參與項(xiàng)目的方式也不同。你可以關(guān)注一個(gè)叫CONTRIBUTING的文檔。參與文檔詳細(xì)描述了項(xiàng)目維護(hù)人員希望看到補(bǔ)丁和貢獻(xiàn)特性的規(guī)范。這可能包含了如何編寫測試,代碼風(fēng)格或者補(bǔ)丁應(yīng)用范圍。
許可證(License)
LICENSE文件是項(xiàng)目的許可證說明文件。一個(gè)開源項(xiàng)目的許可證告訴用戶他們可以做和不可以做什么(例如:使用,修改和分發(fā)),以及參與者的權(quán)利,這個(gè)文件告訴其他人他們可以怎么做。許可和發(fā)布開源項(xiàng)目有許多方式,你可以在這個(gè)網(wǎng)站了解不同許可的含義:choosealicense.com.
文檔和wiki
許多大型項(xiàng)目略過Readme來指定用戶如何使用其項(xiàng)目,這種情況下你在倉庫中通常會找到一個(gè)鏈接或者一個(gè)名叫“docs”的文件夾。
另外,倉庫也可以使用Github的wiki系統(tǒng)來代替文檔。
參與一個(gè)項(xiàng)目
現(xiàn)在你已經(jīng)找到理解一個(gè)項(xiàng)目的材料了,開始行動起來吧。
創(chuàng)建一個(gè)Issue
如果你發(fā)現(xiàn)你使用項(xiàng)目中的一個(gè)bug(但是你不知道如何去修復(fù)它),在文檔中也找不到相關(guān)信息或者對項(xiàng)目存有疑問——創(chuàng)建一個(gè)issue!不管你的issue什么內(nèi)容或者你現(xiàn)在有什么issue,你可能不是唯一存有疑問的,其他用戶可能會從你的issue得到幫助。此外,想要更多關(guān)于issue如何工作的信息,請查看我們的issue指南。
Issues專業(yè)建議
- 檢查當(dāng)前的issue是否有與你相關(guān)聯(lián)的。發(fā)布重復(fù)的issue會讓雙方都降低效率,搜索開放和已經(jīng)關(guān)閉的issue來檢查你現(xiàn)在提出的issue是否已經(jīng)被提及。
- 請明確你的問題:期望的輸出是什么,實(shí)際發(fā)生了什么?以及其他人如何復(fù)現(xiàn)你的問題。
- 對示例的鏈接:復(fù)現(xiàn)問題的方式,比如提供在jsfiddle和codepen上的示例鏈接。
- 匯報(bào)系統(tǒng)環(huán)境的詳細(xì)信息。比如使用什么瀏覽器,使用的庫或者操作系統(tǒng)的版本。
- 在你的issue或者Gist中粘貼錯(cuò)誤輸出或者日志。如果你粘貼錯(cuò)誤輸出或日志到一個(gè)issue中,請使用三個(gè)反引號```使得顯示更漂亮。
Pull請求
如果你自己有能力修復(fù)bug或者添加新特性——那就太妙了。對代碼基做一個(gè)pull請求!請確保你已經(jīng)讀過參與相關(guān)的文檔了,了解許可證并擁有一個(gè)簽名的CLA(如果需要的話)。一旦你提交了一個(gè)pull請求,項(xiàng)目的維護(hù)人員可以比較你的分支和當(dāng)前分支來決定是否合并(pull in)你的變更.
Pull請求專業(yè)建議
- Fork倉庫并克隆到本地。通過連接你本地到初始的“上游”倉庫并標(biāo)記作為一個(gè)遠(yuǎn)程連接。時(shí)常從“上游”Pull in變更保證在提交你的pull請求時(shí)是最新版本,從而減少合并沖突的可能性。詳細(xì)的指導(dǎo)見這里。
- 為你的編輯創(chuàng)建一個(gè)分支。
- 清楚問題是如何發(fā)生的,同時(shí)其他人如何去復(fù)現(xiàn)問題,或者你提交的特性是有幫助的。同樣的,清楚了解你的變更執(zhí)行步驟。
- 最好進(jìn)行測試。如果有,對已有的測試項(xiàng)目測試你的變更,需要時(shí)創(chuàng)建一個(gè)新的測試。不管測試是否存在,請保證你的變更不會擾亂現(xiàn)有項(xiàng)目。
- 提供你變更前后的截圖,包括在html/css上的不同,拖拽圖片到你的pull請求中。
- 盡量參照項(xiàng)目風(fēng)格來參與項(xiàng)目。這包括使用縮進(jìn),符號和注釋,也許在你的項(xiàng)目中使用有所不同,不過使用(和項(xiàng)目一致的風(fēng)格)會讓項(xiàng)目維護(hù)人員更容易合并,其他人也更容易理解和在將來進(jìn)行維護(hù)。
打開pull請求
一旦你打開了一個(gè)pull請求,一個(gè)你提交變更相關(guān)的討論就會開始。其他參與者和用戶會參與進(jìn)來。但是最終還是由維護(hù)者進(jìn)行決策。你可能會被要求對你的pull請求進(jìn)行修改,如果是這樣,為你的分支添加更多的注釋并push它們——它們會自動加入已經(jīng)存在的pull請求。
如果你的pull請求被合并了——非常棒!如果沒有,也沒問題,可能項(xiàng)目的維護(hù)者并沒有注意到,或者他們已經(jīng)為此做了一些事情。這時(shí),我們建議你接受你收到的反饋并繼續(xù)處理,再次提交pull請求——或者創(chuàng)建你自己的開源項(xiàng)目。