开源项目的设置和管理最佳实践

20

今年晚些时候,我想要发布一个PHP框架,作为开源项目。我使用源代码控制(SVN),但是使用频率极低。我是自学的,独立开发,并没有与大型团队工作的经验。我有一些关于如何让项目成功的想法,但有些细节不太清楚。由于还未发布,我想尽一切可能从一开始就建立正确的基础设施。那么,要设置和管理一个成功的项目,我需要了解哪些信息呢?

以下是我认为可以使项目成功的一些想法(除了营销):

  • 好的文档和教程
  • 自动化单元测试和构建,以便将更新推送到网站
  • 明确的路线图
  • 与源代码控制集成的错误跟踪
  • 代码一致性指南
  • 为社区提供支持、分享想法等的论坛
  • 使用该框架构建的良好示例应用程序
  • 博客,以便向社区通报信息
  • 尽可能保持向后兼容

以下是我的一些问题:

  • 如何设置并自动化一步提交-测试-提交-生成API文档-推送更新到网站的过程?编辑:Ant或Maven是否适合此项任务?如果是,请问有关于使用它们设置PHP项目的资源吗?
  • 如何处理(技术上)其他用户的提交?我如何确保这些提交在被集成之前必须经过批准?
  • 在项目社区方面有哪些可以避免的陷阱?我希望它尽可能友好和有帮助性,没有太多的戏剧性。

我很乐意从您的经验中学习任何这些方面的知识。如果您认为我忽略了任何重大问题,请分享它们。任何资源(最好是针对初学者),您可以指引我吗?


1
一次只提一个问题是个好主意。 - anon
此时,关于设置自动系统的第一个问题可能是我的主要关注点。 - VirtuosiMedia
不好意思给自己打个广告:http://www.openprojectguide.org/。我正在那里撰写一些博客文章,主要涉及开源项目的启动和“维护”,大多是从人员角度出发。 - Patrick Cornelissen
8个回答

5
我刚开始参与社区项目,但我会根据我的经验给你一些建议。
如何设置和自动化一步提交-测试-提交-生成API文档-推送更新到网站的过程?
我从未将其实现为一个过程。您可以只是有一个检查清单,并可能创建一些脚本来执行某些任务。我从未使用过任何源代码控制,可以通过脚本自动上传等操作完成。大多数情况下,需要涉及某些Web交互。
在官方发布之前,不要推送API更改。
编辑:工作环境
对于PHP,大多数时候,我要么直接在服务器上进行编辑和测试,使用beta.example.com或类似的东西,然后再将其推送到example.com。您还可以在家用PC上设置Web环境(在Windows上使用XAMPP,或在Linux上使用标准的LAMP安装)。您可能只需使用此处存储库的副本,因此您将执行svn commit,或者适用于您选择的版本控制系统或分布式版本控制系统的其他命令。
有趣的部分是使用不同的PHP版本进行测试。我自己没有做过这个,但你可能可以使用.htaccess文件来运行不同的PHP二进制文件以进行测试。我不确定最佳选择是什么。
我没有用过API,因为我从未创建过库,但是快速搜索后我发现http://www.phpdoc.org/。它看起来像一个成熟的项目,所以那可能是一个起点。
至于创建发布版本,我通常会创建一个只包括分发文件的脚本(它将过滤掉任何VCS文件和您不想要的任何文件)。你可以在Linux上编写一个基于find的脚本(这是我大多数时候所做的),或者可能有其他更好的选择。
如何处理其他用户提交的内容(技术上)?我如何确保那些提交必须在集成之前得到批准?
这主要由缺陷跟踪器和版本控制系统中的有限访问处理。通常,您以及您允许的人可以提交到版本控制系统。其他用户可以提交补丁,但是您可能需要有人审核补丁,测试补丁并进行提交。您可以将这些任务分配给团队,或者将补丁分配给一个人并让他们完成所有工作。
“在项目社区方面,有哪些可以避免的陷阱?我希望它尽可能友好和有帮助而没有太多戏剧性。”
我只想确保与项目成员和社区保持尽可能积极的态度。一些分歧会驱使一些人离开,但只要您拥有满足大多数人需求的稳定产品,我认为那就是任何人能期待的。

API文档方面的观点很好。也许希望一步完成所有工作是不切实际的,但您能否详细说明如何分步骤完成呢?您使用了哪些工具等等? - VirtuosiMedia
请参见我上面的“工作环境”部分。 - bradlis7

5

一个对我很有效的小建议:开始使用第一人称复数代词,而不是单数代词。也就是用“我们”和“我们的”,而不是“我”和“我的”。这会让其他人觉得自己是团队的一部分,而不是只是为了你的自我膨胀做出贡献。


1
对我来说,这个回答被接受似乎很奇怪。它只回答了一个问题,而且甚至没有完全回答。哦,好吧,我不会抱怨的(咕哝)。 - bradlis7

4
你需要做的最重要的事情是吸引用户。没有用户,你就不会得到任何贡献和开发人员的帮助。因为开发人员首先是用户,然后才决定扩展/修复他们使用的东西并可能成为贡献者。
所以要吸引用户,你应该考虑:
- 在项目页面顶部用一两句话描述你的框架的功能 - 提到你的框架如何被使用以及它最适合什么情况下使用 - 添加许多使用示例 - 提到你的框架是稳定的、测试版还是开发版。这很重要,因为用户在开始使用之前需要知道这些信息 - 也要提到你是否想继续改进它并继续工作——大多数用户不想使用一个被放弃的框架(还要记住,许多用户会检查你的提交记录,看看你是否真的在工作——如果你最后一次提交到存储库是几个月前,那么你就不是真的在工作,所以欺骗是不可能的)
如果你拥有所有这些,并且人们开始提交补丁,你可以使用补丁工具将其应用到源代码中。根据你的版本控制系统,你可以使用GNU patch,一个附带版本控制的diff/patch工具,甚至可能是帮助你完成此操作的GUI工具。SVN还没有补丁工具,但'svn diff'将创建一个补丁文件,然后你可以使用GNU patch工具应用它,或者如果你使用TortoiseSVN,则可以将补丁文件右拖到你的工作副本中,并让TortoiseMerge为你应用它。
关于如何最好地处理社区:
- 及时回答问题,不要等待超过两三天才回答问题 - 尽量友好,即使面对沮丧和愤怒的人。只有他们一直在打扰你,告诉他们(如果可能的话仍然要友好)去其他地方 - 总是在邮件列表上讨论项目。你不想反复讨论相同的问题——如果你有一个邮件列表,在讨论重新开始之前,只需将用户指向档案
你应该看一下这个演讲“How Open Source Projects Survive Poisonous People (And You Can Too)”,它非常好,告诉你如何处理不仅是“有毒人”的问题,而且还告诉你如何处理涉及到你项目的所有人的问题。

2
我想补充一点,你应该尽可能地让用户轻松地运行整个程序并修改代码 - 这些“高级用户”可以成为开发人员,或者至少是发送较小补丁的人。

2
不要试图独自完成所有工作 - 对于开源项目,有几个托管提供商可以解决大部分问题。我推荐使用CodePlex或Google Code。
设置构建脚本将取决于您设置的平台,但通常一旦您开始使用任何类型的构建脚本,就很容易将任何工具添加到脚本中。
如果您真的需要您描述的一步完成过程,则需要一个构建服务器。我使用TeamCity,它已设置为在svn中检测到任何更改并触发构建/测试。构建服务器通常能够执行您放入构建脚本中的任何步骤。

TeamCity看起来很有趣。你用它做PHP项目吗?你知道类似的东西可以拿来比较一下吗? - VirtuosiMedia
我没有用它来做php的构建,但它不是语言特定的。它有一个命令行运行器以及msbuild,ant等,只要你有一些在服务器上运行的构建脚本,它就可以工作。CruiseControl也很受欢迎,尽管我自己没有使用过它。 - Tom Clarkson

1

阅读Git作为 SVN 的替代方案

  • Github 中有免费的公共仓库/漏洞跟踪器/维基/分叉启用的社区(其中包括symfonyPHPUnit等)
  • 使用 Git,从您或您最亲密的团队中拉取最感兴趣的内容到主分支上 - "我如何处理其他用户的提交?我怎样才能确保这些提交在集成之前必须得到批准?"

一致的API

  • 受其他公共API的启发
  • 仅在主要版本中进行更改
  • 可猜测的

对用户和开发者都有趣

  • 明确的目标(你的路线图 - 卓越)
  • 有用,与其他所有可用的东西相反
  • 易于使用,但仍然不够容易编写/维护

您可以查看Ant或Phing来构建项目。在构建中包含CodeSniffer,您将节省检查基本格式错误/差异的时间。

这些都是关于软件部分的技术提示...以尊重人类、充满兴趣并对他们的贡献感到过度兴奋,并让他们感觉自己没有浪费时间。这会吸引我。


1

0

你有一堆好点子可以开始动手了。但是你可能需要先精简它们!问问自己,第一个发布版本需要哪些东西。

  1. 为了自动化构建和测试,脚本可以使用ant,maven或Phing(适用于PHP项目)来完成。

  2. 你可能需要一个主机来演示产品。对于PHP来说,这非常容易找到。

  3. 你需要一个开源的托管提供商--特别是Github(但也包括Google Code、Source Forge等)。Github提供故障跟踪、默认许可证、博客以及接受社区变更的强大机制。基于Git,它很好地支持分布式项目。

尽管拥有一个一步构建和安装的流程很好,但是自动集成他人变更可能在一开始并不重要(或者不可取)。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接