開源項目的最佳實踐

jopen 9年前發布 | 10K 次閱讀 開源
 

來自GitHub的 Phil Haack 在Channel 9網站上舉辦了一次 座談會 ,專注于談論開源項目的最佳實踐。

本次會議的四位與會者都是開源項目的維護者,包括來自微軟拉美區的聽眾布道經理(Audience Evangelism Manager) Carlos Rojas ,用于創建松耦合、可維護、易測試的XAML應用的 PRISM框架 的作者 Brian Lagunas ,參與了多個開源項目工作的 David Paquette ,以及適用于C#及VB的分析器庫 CodeCracker 的維護者 Carlos dos Santos

Haack為與會者所提出的第一個話題是:對于那些希望加入自己的開源項目的開發者們,他們有哪些期望?Lagunas認為,提交issue是一種與項目的維護者開展對話的重要方法。Rojas則指出,對于希望為項目作出貢獻的開發者,首先瀏覽一遍未解決問題的列表也非常重要。他們兩位都提到了一種非常實用的相關實踐,即為某些未解決問題打上一個“隨意領取”的標簽,愿意參與這個項目的開發 者都可以領取這些問題。現在甚至還出現了一個 “隨意領取” 的網站,那些潛在的貢獻者們可以在此查到來自多個開源項目的各種可“隨意領取”的未解決問題。Dos Santos表示,對他來說,重要的是貢獻者們能夠為項目提交及修復bug,并且切實地用到這些項目。

所有與會者們都認為,貢獻者應當避免將代碼直接提交并推送至master分支。正確的做法是提交一個pull請求(PR)。Lagunas談論了這方面更多的細節內容,他所期望的方式是貢獻者能夠創建一個屬于自己的分支,在其中實現某些特性或進行bug修復,然后添加相應的測試代碼,最后再提交 PR。到了適當的時機,這個PR將通過某種集中式的篩選操作進行測試,一旦它通過了所有的測試,維護者就將組織一次復審,以確保其中的代碼變更符合項目的標準。

dos Santos表示,為了幫助貢獻者們,保證他們的PR符合項目的標準,可以在項目的根目錄中加入一個CONTRIBUTE.md文件,這種做法非常實用。 Haack也指出,如果項目中已有CONTRIBUTE.md文件存在,那么在貢獻者提交PR時,GitHub就會自動顯示一條信息,提醒貢獻者去閱讀該文件。Lagunas特別強調了仔細閱讀CONTRIBUTE.md文件的重要性,因為它有些時候會包含一些重要的內容,而這些內容并不局限于代碼標準。舉例來說,Prism項目要求貢獻者通過一個永久的、不可撤消的 貢獻者許可協議 (Contributor License Agreement),放棄所貢獻代碼的所有權,將其轉交給該項目所有。如果貢獻者本身就受雇于某些公司,那么這一點就變得尤為重要,因為說不定有貢獻者會回頭宣稱他對于該項目擁有知識產權。總的來說,與會者都認為,項目的許可條款必須明確定義,這一點十分重要。Paquette還特別強調,這種重要性不僅限于貢獻者,同時也包括項目的潛在用戶。

Haack又將討論的方向轉回了原來的話題上,即如何確保PR不會對項目產生破壞。Lagunas提到了適用于.NET平臺上的開源項目的一個免費服務 appveyor ,可以通過該服務對每個PR進行構建與測試。Haack進一步表示,只要你的GitHub項目中沒有什么特別古怪的問題,那么appveyor通常都能夠正確地處理項目的各種依賴。

另一個讓人感興趣的話題是項目的文檔。Rojas表示,在項目中最低限度也要提供一個README.md文檔。Haack以Prism的文檔作為示例,指出編寫項目文檔的正確方式,即通過readme文件說明總體情況,然后再通過其它文件描述各種細節。Rojas還提到了GitHub所提供的另一個工具wiki,他認為可以通過使用wiki有效地建立文檔。

隨后話題轉向了開源的文化。開源社區在這方面存在著一個問題,如果貢獻者出了某些差錯,有時可能會換來一些粗暴的回應。與會者們都認為:應當以良好的態度對待貢獻者,認識到這些貢獻者們的出發點是幫助這個項目。尤其某個PR或許是這個開發者第一次為開源項目貢獻代碼,那么項目維護者的溝通方式就可能會直接影響到這名開發者今后看待開源項目的態度。

最后,所有的與會者們都表示,貢獻者們應當努力嘗試克服膽怯的心態,去尋找那些能夠點燃自己激情的項目。不要忘記,開源的核心是協作。有許多人對于他們所維護的項目充滿了熱情和感情,尤其是看到有人在實際使用他們的項目,或是為這些項目作出貢獻時。

查看英文原文: Best Practices for Open-source Projects

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!