Github 開源項目貢獻指南:如何給開源項目作貢獻 (上)

歡迎你們關注騰訊雲技術社區,咱們將爲你們推薦技術精品文章哦~html

來源:騰訊開源前端

本文是【Github開源項目貢獻指南】系列的第一章,原文【Open Source Guides——How to Contribute to Open Source】node

爲什麼要給開源項目作貢獻?

給[freenode]作貢獻幫助我學到了不少後來在大學和實際工做中用到的技能,我以爲給開源項目工做對個人幫助和對項目自己的幫助相差無幾。python

—@errietta [「Why I love contributing to open source software」]git

給開源項目作貢獻能夠說是在你能想象的領域上學習,傳授,累計經驗的最有效的方式!爲何人們要給開源項目作貢獻,緣由太多了!github

提升現有技能

無論是寫代碼,用戶界面的設計,圖形設計,寫做,或者是組織,若是你想找點練習作一作,在開源項目上你總能找到能勝任的任務。面試

認識和你有一樣愛好的人

氣氛融洽開放的開源項目會讓人數年以後仍然不忘回來看看(項目進展)。許多人在參與開源項目的過程當中結識了一輩子摯友,友誼在會議的互相照面和深夜的線上閒聊中漸漸造成。api

尋找導師或者教導別人

和他人一塊兒合做一個項目意味着你得解釋你是怎麼作事情的,同時尋求他人的幫助。學習和傳授知識的體驗對每一個參與其中的人來講都是使人愉快的體驗。ide

作一個公開的產品幫你贏得聲譽(和職業機會)

從開源項目的定義能夠知道,你全部的工做成果都應該公開,這意味着你免費得到了一個向衆人展現你能力的機會。工具

學習他人的技能

開源項目給參與其中的人們提供了鍛鍊領導力和管理能力的機會,好比解決衝突,組織團隊的成員,辨別工做的輕重緩急。

你有權作出改動,就算是很小的

你不須要成爲那種一直在給開源作貢獻的人。你有在網站上看見手誤嗎,並且但願有人能修正它。在一個開源項目中,你本身就能夠作到。開源幫助人們在生活和對世界的體驗上感受到更有力量,這自己確實是意見可喜的事情。

貢獻是什麼意思

若是你是一個剛剛開始的開源貢獻者,這個過程可能會讓你以爲很嚇人。如何找到正確的項目?你不知道怎麼貢獻代碼怎麼辦?若是改錯了怎麼辦?

沒必要擔憂!有不少參與開源項目的方法,和一些讓你走出困境的小技巧。

你不須要貢獻代碼

對開源貢獻的一個廣泛的誤解就是你得貢獻代碼。實際上,一般和代碼無關的部分纔是最容易忽視的:經過參與非代碼部分的貢獻會給項目帶來巨大的幫助。

我由於對 CocoaPods的貢獻而著名,可是大部分人都不知道我在這個工具自己的開發上並無作實質性的工做。我花在這個項目上的主要時間都用來整理文檔和宣傳品牌。

—–@orta

即便你是一個開發者,非代碼部分的貢獻是一個很好的方式讓你參與一個項目和認識社區的成員。創建這種關係會給你從事項目其餘部分工做的機會。

我第一次接觸 Python 開發團隊(又叫作 python-dev)是在2002年6月17號我給郵件列表發郵件讓他們接受個人補丁的時候。我迅速的發現的這個項目的缺陷,並決定負責組織團隊的郵件摘要。這給了我一個很好的機會去諮詢他們對一個話題的解釋,可是實際上更關鍵的是當有人提出問題的時候我能意識到那是否是須要修復的 bug 。

—–@brettcannon

你喜歡策劃活動嗎?

  • 組織關於項目的研討會或者線下聚會,就像 @fzamperin

  • 組織項目會議(若是他們有的話)

  • 幫助社區成員找到合適的會議主題並提交一份發言稿。

你喜歡設計嗎?

  • 重構項目的佈局以增長其易用性

  • 組織用戶使用調查來重構項目的導航或者菜單

  • 把樣式指南放在一塊兒以此來幫助項目有一致的視覺設計

  • 設計 t-shirt 或者 新的logo,就像是hapijs的貢獻者們作的同樣

你喜歡寫做嗎?

  • 編寫或者改善項目的文檔

  • 建立一個文件夾展現項目怎樣使用的例子

  • 給項目編寫教程,就像pypa的貢獻者們作的同樣

  • 爲項目的文檔作翻譯

認真的說,[文檔]真的是重要得一逼。目前Babel的文檔已經很棒了,這也是其殺手鐗的特性之一。固然,還有一些章節須要你們的完善,即便是隨便在哪兒增長一個段落都很感激。

你喜歡組織嗎?

  • 鏈接重複的 issue,或者爲某個iuuse添加新的標籤來讓事情變得井井有理

  • 檢查打開的 issue,就像@nzakaseslint作的那樣

  • 問一個明確的問題推薦討論

你喜歡寫代碼嗎?

  • 找一個 issue 去解決。就像@dianjinLeaflet作的那樣

  • 詢問項目全部者你是否能夠幫忙寫一個新的功能

  • 使配置項目的過程自動化

  • 改善工具鏈和測試

你喜歡幫助別人嗎?

  • 在諸如 Stack Overflow或者reddit上回答關於項目的問題(這裏有一個關於Postgres例子)

  • 在打開的 issue 中回答人們的問題

  • 幫助調整討論板塊或者對話渠道

你喜歡幫助改善別人的代碼嗎?

  • 審查別人提交的代碼

  • 寫一個關於項目如何使用的教程

  • 幫助其餘的貢獻者,就像在Rust項目上@ereichert爲@bronzdoc作的那樣

你不必定只能給軟件項目作貢獻!

雖然開源通常指的是軟件項目,實際上你能夠在任何項目上進行協做。有不少書籍,經驗貼,列表,課程都是開源項目。 好比:

即便你不是你個軟件工程師,給一個文檔性質的項目作貢獻也會讓你邁進開源世界的大門。在沒有代碼的項目上作事一般沒那麼嚇人(相比與有代碼的項目來講),並且這個寫做的過程會讓你積累更多自信和經驗。

投身於一個新項目

若是你打開一個項目的 issue tracker 。裏面的東西可能讓你以爲不解,不僅是你有這樣的感受。這些工具須要不少的隱性知識,可是人們會幫助你搞清楚,你也能夠問他們問題。 —-@shaunagm 「How to Contribute to Open Source」

對於那種不只僅是修復一個手誤的工做,給開源項目作貢獻就像是在一個聚會上走近一羣陌生人同樣。當他們正在熱火朝天的討論金魚的時候,你插進去開始講駱駝,他們會像你投來異樣的眼光。

在你帶着你的看法盲目的加入討論以前,首先研究一下他們到底在討論什麼。這樣會增長你的觀點被注意到和聽取的機會。

分析一個開源項目

每個開源社區都不同。

在一個項目上花費數年的事件會讓你對這個項目瞭如指掌。可是當你遷移到另一個項目中時,你會發現他們的詞彙,規範和討論的風格徹底不同。

話雖如此,不少開源項目仍是遵循一個類似的組織結構。理解不一樣社區的角色和整體的進程會幫助你很快的融入一個新的項目。

一個經典的開源項目會有這樣幾類人:

  • 做者: 建立該項目的人或者組織

  • 全部者: 對該組織或者倉庫有行政權的人(一般和原始的做者不是一我的)

  • ** 維護者:** 那些負責宣傳項目,管理項目組織的貢獻者( 他們也多是做者或者全部者)

  • 貢獻者: 每一個給項目作出或多或少貢獻的人

  • 社區成員: 使用項目的人。他們可能在關於項目方向上的討論中積極發表本身的觀點

更大型的項目可能有針對不一樣工做的子社區或者工做組,好比工具鏈,工做分配,打造社區的溫馨度和事件管理。查看項目網站上的「團隊」頁面,或者存放管理文檔的倉庫尋找這些信息。

一個項目也會有他本身的文檔,這些文件放在項倉庫目的一級目錄。

  • LISENCE:因爲開源項目的定義,每一個開源項目都要有一個開源協議。若是一個項目沒有一個開源協議,那麼他就不是開源項目。

  • README:README文件是給社區的新成員的使用手冊。它解釋了爲何這個項目是有用的和怎麼開始使用這個項目。

  • CONTRIBUTING:READMEj文件是幫助人們使用項目的,而CONTRIBUTING文檔是幫助人們對項目作貢獻。可是不是每一個項目都有CONTRIBUTING文件,那麼有這個文件就標誌着這是一個開放的項目。

  • CODE_OF_CONDUCT:行動守則制定了參與者行爲的基本規則,幫組促進了社區的友好,開放的氛圍。可是不是全部項目都有 CODE_OF_CONDUCT 文件,若是有的話那就標誌着這是一個開放的項目。

  • Other documentation:還可能有其餘的文檔,好比教程,預覽,或者管理政策,尤爲是在大型項目中會出現。

最後,開源項目使用下面這些工具來管理討論。在你閱讀本文的過程當中,你會對開源社區思考和工做的方式有一個整體的映像。

  • Issue tracker:人們用來討論和項目相關的問題的地方

  • Pull requests: 人們用來討論和審查正在進行中的修改。

  • Discussion forums or mailing lists(論壇或者郵件列表): 有些項目會用不一樣的頻道對應不一樣的討論主題(好比說,「我怎樣才能…」 或者 「大家對於…的見解是」,而不是 bug 報告或者功能請求。另一些項目直接用 Issue tracker 進行全部話題的討論。

  • Synchronous chat channel(匿名的聊天頻道):有些項目用聊天頻道(好比Slack或者IRC)來進行隨意的討論,合做,或者快速的修改。

找一個項目來作貢獻

如今你已經知道開源項目是怎麼工做的了,是時候找個項目而後開始貢獻了!

若是你歷來沒有給開源項目作過貢獻,那麼從美國前總統約翰·肯尼迪的名言之中吸收一點建議吧:

不要問你的國家能爲你作什麼,先問問本身你能爲本身的國家作什麼。

給開源項目作貢獻能夠發生在任何級別的任何項目。你不須要過度在乎你的第一次貢獻會是什麼,或是以什麼形式。

相反,從你已經在用的項目或者你想用的項目開始。你貢獻最積極的項目正好是那些你發現你會是否是來看一下的項目。

在那些項目中,儘管釋放你的本能,去發現那些你以爲能夠作的更好或者作的不一樣的東西。

開源世界不是一個排他性的俱樂部,它正是有那些像你同樣的人創造的。「開源組織」是一個把世界上全部問題當作能夠解決的夢幻之地。

你能夠瀏覽一下項目的 README 文檔,找找有沒有掛掉的連接或者手誤。或者你是一個新用戶,並且你發現什麼了東西不對,或者一個你以爲應該放在文檔中的 Issue ,與其直接忽視或者找別人修復它,還不如本身動手把他改過來。這就是開源的含義啦!

28%的不固定的貢獻者所作的都是在文檔上,好比更正手誤,從新排版或者提供一種語言的翻譯版本。

你還能夠用如下的資源來幫助你尋找項目。

  • GitHub Explore

  • First Timers Only

  • Your First PR

  • CodeTriage

  • 24 Pull Requests

  • Up For Grabs

一個在你貢獻以前的清單

當你發現了一個你想要貢獻的項目的時候,對項目作一快速的瀏覽來保證這個項目適合接受你的貢獻,不然你的工做得不到應有的迴應。

這裏提供了一份評估一個項目是否適合新的貢獻者的清單

檢查開源的定義

他有一份開源協議嗎?一般狀況下是一個在項目根目錄下的叫 LISENCE 的文件。

項目接受貢獻者的活躍程度

查看 master 分支上的提交活動。在github上,你能夠在倉庫的主頁上看到這個信息

最近一次提交是何時

項目目前有多少貢獻者

人們提交的頻率是怎樣的?(在 Github ,你能夠經過點擊頂部的 「commit」 來找到。

接下來,查看項目的 issue 。

目前有多少 issue 。

Do maintainers respond quickly to issues when they are opened?

項目維護者對打開的 issue 回覆的速度如何?

在 issue 中的討論是否熱烈。

issue 都是在最近的嗎?

issue 被關閉了嗎(在 Github ,在 issue 頁面點擊 「closed」 標籤查看關閉的 issue 。

對項目的 pull request 作一樣的檢查。

目前有多少 pull request?

項目維護者對打開的 pull request 回覆的速度如何?

在 pull request 中的討論是否熱烈?

pull request 都是最近的嗎?

最近一次的 pull request 被合併是何時?(在 Github ,在 pull request 頁面點擊 「closed」 標籤查看被關閉的 pull request。

項目是否足夠開放

若是一個項目是友好和開放的那麼意味着他們很樂意接受新的貢獻者。

項目維護者對 issue 中的問題的回覆時候有幫助?

在 issue ,論壇,聊天室(好比 IRC 或者 Slack)中的人們是否是樂於助人。 pull request會被審查嗎?

項目維護者對貢獻者的 pull request 表示感謝了嗎?

無論什麼時候當你看到核心開發者作出的長篇大論式的,總結性的發言。不妨思考他們總結是建設性的嗎?並且在保持禮貌的同時一步一步把討論引向一個結論。若是你看到了討論過程當中出現摩擦,常常讓人嘆息的是他們把精力浪費在了爭吵而不是開發上面。

— @kfogel, Producing OSS

如何提交貢獻?

假如你已經找到了一個你喜歡的項目,並且你已經準備好作一次貢獻。終於!是時候談談怎麼正確作出貢獻啦!

接下篇《Github 開源項目貢獻指南-如何給開源項目作貢獻 (下)》

####相關閱讀: Github開源項目貢獻指南:建立一個開源項目

Github 開源項目貢獻指南:領導和管理社區

Github 開源項目貢獻指南:從開源工做中獲取報酬


此文已由做者受權騰訊雲技術社區發佈,轉載請註明文章出處
原文連接:https://www.qcloud.com/community/article/163375
獲取更多騰訊海量技術實踐乾貨,歡迎你們前往騰訊雲技術社區

相關文章
相關標籤/搜索