从 svn 到 hg,我们都很兴奋,随着开发工作流程或多或少地被淘汰,这里仍然是最困难的部分 - 暂存和集成系统。
希望这个问题比你常见的“我如何从 xxx 移动到 Mercurial”更进一步。请原谅冗长且可能写得不好的问题:)
我们是做很多项目(主要是 PHP 和 Zend)的网上商店,所以我们有一个巨大的 svn 存储库,有大约 100 多个文件夹,每个文件夹代表一个项目,当然还有它自己的标签、分支和主干。在我们的集成和测试服务器(QA 和客户查看工作结果和测试内容)上,一切都非常自动化 - Apache 设置为自动选择新项目,为每个项目/主干创建虚拟主机;mysql 迁移脚本也在主干中,开发人员可以通过简单的 Web 界面应用它们。长话短说,我们的工作流程现在是这样的:
- 签出代码,工作,提交
- 通过 Web 界面在服务器上运行更新(这基本上在特定项目的服务器上进行 svn up,如果需要,还运行 db-migration 脚本)
- 服务器上的 QA 更改
当我们有 2 个以上的开发人员在处理相同的代码时,这种方法对于大型项目肯定不是最佳的。svn 中的分支只会引起更多的头痛,好吧,因此转向 Mercurial。这就是问题所在 - 如何为此类工作组织有效的登台/集成/测试服务器(您有很多项目,比如单个开发人员可能在 1 天内处理 3 个不同的项目)。
我们决定基本上使用“默认”分支跟踪生产,然后在各个分支中进行所有更改。但是在这种情况下,我们如何为每个分支自动进行分段更新?如果早期对于一个项目,我们几乎总是在主干上工作,所以我们需要一个 DB、一个虚拟主机等。现在我们可能会讨论每个项目的 N 个数据库、N 个虚拟主机配置等。那么 CI 的东西呢(例如运行 phpDocumentor 和/或单元测试)?它应该只在“默认”上完成吗?在树枝上?
我想知道其他团队如何解决这个问题,也许是我们没有使用或忽略的一些最佳实践?
补充笔记:
可能值得一提的是,我们选择 Kiln 作为 repo 托管服务(主要是因为我们无论如何都在使用 FogBugz)