繁体   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