安装和管理开源项目的最佳实践

时间:2010-04-02 16:23:03

标签: open-source project-management installation

今年晚些时候,我想发布一个我一直在开源的PHP框架。我确实使用了源代码控制(SVN),但它的使用非常有限。我是自学成才,我自己开发,没有与大型团队合作的经验。关于什么可以帮助项目成功,我有一些想法,但我对一些细节很模糊。由于它还没有发布,我想尽我所能从一开始就建立正确的基础设施。为了设置和管理成功的项目,我需要知道什么?

我必须使一些想法成功(除了推广它):

  • 良好的文档和教程
  • 自动化单元测试和构建到 推送更新到网站
  • 明确的路线图
  • Bug跟踪集成了 来源控制
  • 保留代码的样式指南 一致的
  • 社区获取的论坛 支持,分享想法等。
  • 一个很好的示例应用程序 框架
  • 一个让社区了解情况的博客
  • 保持向后兼容性 尽可能

我的一些问题:

  • 如何设置和自动化一个 步骤submit-test-commit-generate API docs-push更新到网站流程? 修改:Ant或Maven会成为好的候选人吗?如果是这样,您是否知道使用它们设置PHP项目的任何资源?
  • 我如何处理(技术上) 其他用户提交的内容?怎么能 我确保这些提交必须 在被整合之前获得批准?
  • 有哪些陷阱 可以避免的 项目社区?我宁愿拥有 它既友好又乐于助人 可能没有太多戏剧性。

我很乐意从您对这些观点的经验中学习。如果您认为我错过了任何重大内容,请分享。你可以指出我的任何资源(最好是面向初学者)也会非常感激。

8 个答案:

答案 0 :(得分:5)

我刚开始参与社区项目,但我会就你所知道的事情给你一些建议。

  

如何设置和自动化一步式提交 - 测试 - 提交 - 生成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写一个脚本(这是我大部分时间都在做的),或者可能还有其他更好的选择。

  

如何处理(技术上)其他用户提交的内容?如何确保在整合之前必须批准这些提交?

这主要由错误跟踪器处理,并且版本控制系统中的访问受限。通常,您和您允许的人可以提交VCS。其他用户可以提交补丁,但之后您可能会有人查看补丁,测试补丁并提交。您可以将这些任务拆分为一个团队,或者为一个人分配补丁并让他们全部完成。

  

项目社区可以避免哪些陷阱?我宁愿让它尽可能友好和乐于助人而不会有太多的戏剧性。

我只想确保项目成员和社区尽可能保持积极态度。会有一些分歧,它会驱使一些人离开,但只要你有一个稳定的产品满足大多数人的需求,我认为这是所有人都可以期待的。

答案 1 :(得分:5)

对我来说效果很好的一个小建议:开始使用第一人称​​复数代词,而不是单数代词。也就是说,谈论“我们”和“我们”而不是“我”和“我”。它鼓励其他人在他们感觉自己是团队的一部分时参与,而不是当他们觉得他们正在贡献自己的自我扩张时。

答案 2 :(得分:4)

您必须做的最重要的事情是吸引用户。没有用户,您将无法获得任何贡献,开发人员会帮助您。因为开发人员是第一个用户,然后他们决定扩展/修复他们使用的东西,并可能成为贡献者。

为了吸引用户,你应该考虑

  • 描述您的框架在项目页面顶部的一两句话中的作用
  • 提及如何使用您的框架以及
  • 对哪些,哪种情况最有用“
  • 添加了很多关于如何使用它的例子
  • 提及您的框架是稳定的,beta还是alpha。这很重要,因为用户在开始使用之前需要知道
  • 还提到你是否要继续改进它并继续努力 - 大多数用户不想使用被抛弃的框架(还要记住很多用户检查你的提交,看看你是否真的在工作在它上面 - 如果你最后一次提交到存储库是几个月之前,那么你并没有真正做到这一点,所以作弊是不可能的)

如果您完成了这一切,并且人们开始提交补丁,您可以使用补丁工具将这些补丁工具应用到您的来源。根据您的版本控制系统,您可以使用GNU补丁,版本控制附带的差异/补丁工具,甚至可以使用GUI工具来帮助您完成此操作。 SVN没有补丁工具(但是),但'svn diff'将创建一个补丁文件,然后您可以使用GNU补丁工具,或者如果您正在使用TortoiseSVN,请将补丁文件右键拖动到您的工作副本并让TortoiseMerge为你申请。

关于如何最好地与社区打交道:

  • 及时回答问题,不要等待超过两三天才能回答问题
  • 尽管心烦意乱,生气勃勃,但也要努力做好事。只有当他们一直困扰着告诉他们(如果可能的话,还是以一种很好的方式)去其他地方
  • 始终在邮件列表上继续讨论该项目。您不想一遍又一遍地重复相同的讨论 - 如果您有邮件列表,只需在讨论重新开始之前将用户指向存档

你应该看一下“How Open Source Projects Survive Poisonous People (And You Can Too)”的演讲 - 这真的很好,并告诉你很多关于如何处理'有毒的人',以及如何处理你项目中涉及的所有人。< / p>

答案 3 :(得分:2)

我想补充一点,您应该让用户尽可能轻松地让整个程序运行并修改代码 - 这些“超级用户”可以“转换”为开发人员或至少发送给他们的人较小的补丁。

答案 4 :(得分:2)

不要试图自己完成 - 对于开源项目,有几个托管服务提供商可以解决大多数问题。我推荐使用codeplex或谷歌代码。

设置构建脚本将取决于您设置的平台的数量,但一般来说,一旦开始使用任何类型的构建脚本,就可以轻松地将任何所需的工具添加到脚本中。

如果您确实需要您描述的一步过程,则需要构建服务器。我使用TeamCity,我已经设置了它来监视svn中的任何更改,并在签入任何内容时触发构建/测试。构建服务器通常能够执行您在构建脚本中添加的任何步骤。

答案 5 :(得分:1)

Git上阅读以替代SVN

  • 免费的公共存储库/错误跟踪器/ wiki / fork-enabled社区Github(托管symfonyPHPUnit等)
  • 我如何处理(技术上)其他用户提交的内容?我如何确保在集成之前必须批准这些提交?” - 使用Git,拉出您/您最近的团队发现的内容最主要的分支

一致的API

  • 受到其他公共API的启发:s
  • 仅更改主要版本
  • 猜测的

对用户和用户都很感兴趣开发者

  • 明确目标(您的路线图 - 优秀)
  • 有用,反对其他所有可用的
  • 易于使用,但仍然不易于编写/维护自己

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

这些都是技术提示,关于软性部分...尊重人们,引起很多人的兴趣,并且对他们的贡献感到非常兴奋,让他们觉得他们不会浪费他们的时间。这对我很有吸引力。

答案 6 :(得分:1)

看看卡尔福格尔关于Producing Open Source Software的书。它可能包含你提出的所有问题。

您还应该计划参与社区活动。我建议阅读Jono Bacon的社区艺术[http://www.artofcommunityonline.org/]

答案 7 :(得分:0)

你有很多想法可以开始。您可能必须从修剪它们开始!问问自己第一次发布的必要条件。

  1. 为了自动化构建和测试,可以使用ant,maven或phing为PHP项目完成脚本编写。

  2. 您可能需要一个主机,以便您可以演示该产品。对于很容易找到的PHP。

  3. 您需要一个开源托管服务提供商 - 尤其是github(还有Google代码,来源伪造等)。 Github提供错误跟踪,默认许可,博客和接受社区变更的优秀机制。它基于git,很好地促进了分布式项目。

  4. 尽管一步构建和安装到位是件好事,但是自动化其他更改的集成可能并不重要(或者不可取)。

    祝你好运!