簡體   English   中英

安裝和管理開源項目的最佳實踐

[英]Best Practices for Setup and Management of an Open Source Project

今年晚些時候,我想發布一個我一直在開源的PHP框架。 我確實使用了源代碼控制(SVN),但它的使用非常有限。 我是自學成才,我自己開發,沒有與大型團隊合作的經驗。 關於什么可以幫助項目成功,我有一些想法,但我對一些細節很模糊。 由於它還沒有發布,我想盡我所能從一開始就建立正確的基礎設施。 為了設置和管理成功的項目,我需要知道什么?

我必須使一些想法成功(除了營銷之外):

  • 良好的文檔和教程
  • 自動化單元測試和構建,以推動更新到網站
  • 一個清晰的路線圖
  • Bug跟蹤與源代碼管理集成
  • 用於保持代碼一致的樣式指南
  • 社區獲得支持,分享想法等的論壇
  • 用框架構建的一個很好的示例應用程序
  • 一個博客,讓社區了解情況
  • 盡可能保持向后兼容性

我的一些問題:

  • 如何設置和自動化一步提交 - 測試 - 提交 - 生成API文檔 - 推送更新到網站流程? 編輯 :Ant或Maven會成為這個的好候選人嗎? 如果是這樣,您是否知道使用它們設置PHP項目的任何資源?
  • 如何處理(技術上)其他用戶提交的內容? 如何確保在整合之前必須批准這些提交?
  • 在項目社區方面可以避免哪些陷阱? 我寧願讓它盡可能友好和樂於助人,沒有太多的戲劇性。

我很樂意從你對這些方面的經驗中學習。 如果您認為我錯過了任何重大內容,請分享。 您可以指向我的任何資源(最好是面向初學者)也會非常感激。

我剛剛開始參與社區項目,但我會就你所知道的事情給你一些建議。

如何設置和自動化一步提交 - 測試 - 提交 - 生成API文檔 - 推送更新到網站流程?

我從來沒有將它作為一個過程實現。 你可以只有一個清單,甚至可能創建一些腳本來完成某些任務。 我從來沒有使用任何自動上傳的源代碼控制,而是由腳本完成。 大多數時候,都會涉及一些網絡互動。

在官方發布之前,您不希望推送API更改。

編輯:工作環境

對於PHP,大多數時候,我要么直接在服務器上進行編輯,然后使用beta.example.com或類似方法在那里進行測試,然后再推送到example.com。 您還可以在家用PC上設置Web環境(使用XAMPP for Windows,或Linux上的標准LAMP安裝)。 您可能只是在這里使用存儲庫的鏡像,因此您可以執行svn commit ,或者適合您選擇的VCS或DVCS。

有趣的部分是使用不同的PHP版本測試它。 我自己沒有這樣做,但是你可以使用.htaccess文件運行不同的PHP二進制文件來測試它。 我不確定這是最好的選擇。

我沒有做過很多API,因為我從來沒有創建過一個庫,但只是快速搜索我找到了http://www.phpdoc.org/ 它看起來像一個成熟的項目,所以這可能是一個起點。

就創建版本而言,我通常創建一個腳本,該腳本僅包含作為發行版的一部分的文件(它將過濾掉任何VCS文件,以及您在分布式文件中不需要的任何內容)。 你可以在linux上find一個關於find的腳本(這是我大部分時間都在做的),或者可能還有其他更好的選擇。

如何處理(技術上)其他用戶提交的內容? 如何確保在整合之前必須批准這些提交?

這主要由錯誤跟蹤器處理,並且在版本控制系統中受限制。 通常,您和您允許的人可以提交VCS。 其他用戶可以提交補丁,但之后您可能會有人查看補丁,測試補丁並提交。 您可以將這些任務拆分為一個團隊,或者為一個人分配補丁並讓他們全部完成。

在項目社區方面可以避免哪些陷阱? 我寧願讓它盡可能友好和樂於助人,沒有太多的戲劇性。

我只想確保項目成員和社區盡可能保持積極態度。 會有一些分歧,它會驅使一些人離開,但只要你有一個穩定的產品,滿足大多數人的需求,我認為這是所有人都可以期待的。

一個小的建議,對我來說很有效:開始使用第一人稱復數代詞,而不是單代詞。 也就是說,談論“我們”和“我們”而不是“我”和“我”。 它鼓勵其他人在他們感覺自己是團隊的一部分時參與,而不是當他們覺得他們正在貢獻自己的自我強化時。

您必須做的最重要的事情是吸引用戶。 沒有用戶,您將無法獲得任何貢獻,開發人員會幫助您。 因為開發人員是用戶的第一,然后他們決定擴展/修復他們使用的東西,並可能成為貢獻者。

所以為了吸引用戶,你應該考慮

  • 在項目頁面頂部的一兩句話中描述您的框架所執行的操作
  • 提到你的框架是如何被使用的,以及它最有用的是什么情況
  • 添加了很多關於如何使用它的例子
  • 提一下你的框架是穩定的,beta還是alpha。 這很重要,因為用戶在開始使用之前需要知道這一點
  • 還要提一下你是否要繼續改進它並繼續努力 - 大多數用戶不想使用被拋棄的框架(還要記住很多用戶檢查你的提交,看你是否真的在做它 - 如果您最近幾次提交到存儲庫是在幾個月前,那么您並沒有真正開展工作,所以作弊是不可能的)

如果你得到了所有這些,並且人們開始提交補丁,你可以使用補丁工具將這些補丁工具應用到你的來源。 根據您的版本控制系統,您可以使用GNU補丁,版本控制附帶的差異/補丁工具,甚至可以使用GUI工具來幫助您完成此操作。 SVN沒有補丁工具(但是),但'svn diff'將創建一個補丁文件,然后您可以使用GNU補丁工具,或者如果您正在使用TortoiseSVN,請將補丁文件右鍵拖動到您的工作副本並讓TortoiseMerge為您應用它。

以及如何最好地與社區打交道:

  • 及時回答問題,不要等待兩三天以上的回答問題
  • 試着變得更好,即使有不安和憤怒的人。 只有當他們一直困擾着告訴他們(如果可能的話,還是以一種很好的方式)去其他地方
  • 始終在郵件列表上繼續討論該項目。 你不想一遍又一遍地重復同樣的討論 - 如果你有一個郵件列表,只需在討論重新開始之前將用戶指向存檔

而且你應該看一下“ 開源項目如何生存有毒人群(你也可以) ” - 這非常好,並且告訴你很多關於如何處理“有毒人”以及如何處理所有涉及的人在你的項目中。

我想補充一點,您應該讓用戶盡可能輕松地完成所有操作並修改代碼 - 這些“高級用戶”可以“轉換”為開發人員或至少發送較小補丁的人。

不要試圖自己完成 - 對於開源項目,有幾個托管服務提供商可以解決大多數問題。 我推薦使用codeplex或谷歌代碼。

設置構建腳本在某種程度上取決於您設置的平台,但一般情況下,一旦開始使用任何類型的構建腳本,就可以輕松地將所需的任何工具添加到腳本中。

如果您確實需要您描述的一步過程,則需要構建服務器。 我使用TeamCity,我已經設置了它來監視svn中的任何更改並在檢查某些內容時觸發構建/測試。構建服務器通常能夠執行您在構建腳本中執行的任何步驟。

閱讀Git作為SVN的替代方案

  • Github中免費的公共存儲庫/ bug跟蹤器/ wiki / fork-enabled社區(其中包含symfonyPHPUnit
  • 我如何處理(技術上)其他用戶提交的內容?我如何確保在集成之前必須批准這些提交? ” - 使用Git,將你/你最親密的團隊最感興趣的內容拉到主分支

一致的API

  • 受到其他公共API的啟發:s
  • 只改變主要版本
  • 可猜測

對用戶和開發人員都很有意思

  • 明確目標(您的路線圖 - 優秀)
  • 有用,與其他一切可用
  • 易於使用,但仍然不易於編寫/維護自己

您可以查看Ant或Phing來構建您的項目。 在構建中包含CodeSniffer ,您將節省檢查基本格式錯誤/差異的時間。

這些都是關於柔軟部分的技術提示......尊重他人,非常感興趣,對他們的貢獻過於興奮,讓他們覺得他們不浪費時間。 這對我很有吸引力。

看看Karl Fogel關於制作開源軟件的書。 它可能包含你提出的所有問題。

您還應該計划參與社區活動。 我建議閱讀Jono Bacon的社區藝術[ http://www.artofcommunityonline.org/]

你有很多想法可以開始。 您可能必須從修剪它們開始! 問問自己第一次發布的必要條件。

  1. 為了自動化構建和測試,腳本可以使用ant,maven或phing來完成PHP項目。

  2. 您可能需要一個主機,以便您可以演示該產品。 對於很容易找到的PHP。

  3. 您需要一個開源托管服務提供商 - 尤其是github (還有谷歌代碼,源代碼偽造等)。 Github提供錯誤跟蹤,默認許可,博客和接受社區變更的優秀機制。 它基於git,很好地促進了分布式項目。

盡管一步構建和安裝到位是件好事,但自動化其他更改的集成可能並不重要(或者不可取)。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM