Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Subversion到Mercurial-如何适应工作流和登台/集成系统?_Mercurial_Continuous Integration_Installation_Staging - Fatal编程技术网

从Subversion到Mercurial-如何适应工作流和登台/集成系统?

从Subversion到Mercurial-如何适应工作流和登台/集成系统?,mercurial,continuous-integration,installation,staging,Mercurial,Continuous Integration,Installation,Staging,从svn到hg,我们都被吓坏了,随着开发工作流程或多或少地被冲出,这里仍然是最困难的部分——阶段和集成系统 希望这个问题比您常见的“我如何从xxx移动到Mercurial”更进一步。请原谅冗长且可能写得不好的问题:) 我们是做很多项目(主要是PHP和Zend)的网络商店,所以我们有一个巨大的svn repo,有100多个文件夹,每个文件夹代表一个项目,当然有自己的标记、分支和主干。在我们的集成和测试服务器上(QA和客户机在那里查看工作结果和测试内容),一切都是自动化的——Apache设置为自动接

从svn到hg,我们都被吓坏了,随着开发工作流程或多或少地被冲出,这里仍然是最困难的部分——阶段和集成系统

希望这个问题比您常见的“我如何从xxx移动到Mercurial”更进一步。请原谅冗长且可能写得不好的问题:)

我们是做很多项目(主要是PHP和Zend)的网络商店,所以我们有一个巨大的svn repo,有100多个文件夹,每个文件夹代表一个项目,当然有自己的标记、分支和主干。在我们的集成和测试服务器上(QA和客户机在那里查看工作结果和测试内容),一切都是自动化的——Apache设置为自动接收新项目,为每个项目/主干创建vhost;mysql迁移脚本也在主干中,开发人员可以通过简单的web界面应用它们。长话短说我们的工作流程是:

  • 签出代码、执行工作、提交
  • 通过web界面在服务器上运行更新(这基本上会在特定项目的服务器上运行svn,如果需要还可以运行db迁移脚本)
  • 服务器上的QA更改
  • 当我们有两个以上的开发人员在使用相同的代码时,这种方法对于大型项目来说肯定是次优的。svn的分支只会引起更多的头痛,因此转向Mercurial。这就是问题所在——如何为这类工作组织高效的暂存/集成/测试服务器(如果您有许多项目,假设单个开发人员可以在一天内处理3个不同的项目)

    我们决定让“默认”分支基本上跟踪生产,然后在各个分支中进行所有更改。在这种情况下,我们如何为每个分支自动执行登台更新?如果之前的一个项目我们几乎总是在主干上工作,那么我们需要一个DB、一个vhost等等。现在我们可能会讨论每个项目的N个数据库、N个vhost配置等等。那么CI的东西(比如运行phpDocumentor和/或单元测试)呢?是否应仅在“默认”条件下执行?在树枝上

    我想知道其他团队如何解决这个问题,也许是我们没有使用或忽略的一些最佳实践

    附加说明:


    可能值得一提的是,我们选择了Cinel作为repo托管服务(主要是因为我们使用的是FogBugz)

    您需要记住的是,它为版本控制引入了另一个维度:
    您不必再只依赖分支(并从正确的分支获得一个暂存工作区)
    现在,您可以通过DVCS使用(回购之间的推/拉)

    这意味着您的暂存环境现在是一个回购(具有项目的完整历史记录),在某个分支签出:
    许多开发人员可以将多个不同的分支推送到该分期回购协议:对账过程可以在该回购协议中单独进行,在您选择的“主”分支中进行。
    或者,他们可以在回购协议中撤销分期付款分支,并在收回之前进行测试


    来自Joel关于Mercurial的教程


    开发人员无需提交其他人才能看到:允许他/她首先提取暂存分支,在本地协调任何冲突,然后推送到暂存回购。

    这绝不是您最终选择的完整答案,但这里有一些工具可能会考虑到这一点:

    • 没有工作目录的存储库——如果
      clone-U
      hg update null
      您将得到一个没有工作目录的存储库(只有.hg)。它们在服务器上更好,因为它们占用更少的空间,而且没有人想在那里编辑
    • changegroup
      hooks
    对于最后一个,
    changegroup
    钩子在一个或多个变更集通过推或拉到达时运行,您可以让它做一些有趣的事情,例如:

    • 根据收到的内容,将变更集推送到另一个回购协议上
    • 更新接收回购的工作目录
    例如,您可以仅使用上述工具自动执行类似操作:

  • 开发人员将五个变更集推送到central repo/project1/main
  • 最后一个变更集位于分支“my Experience”上,因此CSET会自动重新推送到可选创建的repo central repo/project1/my Experience
  • central repo/project1/my experiment自动执行
    hg更新提示
    ,该提示肯定位于
    my Expirement
    分支上
  • central repo/project1/my Experience会在其工作目录中自动运行测试,如果测试通过,则会部署一个“make dist”,这可能会设置数据库和vhost
  • 重要的是,mercurial书中的第10章介绍了这一点,即不要让用户等待该过程。您希望用户推送到一个可能包含OK代码的repo,并且自动处理的代码执行CI和部署工作,如果它通过,那么最终可能是一个OK repo

    在我工作过的最大的mercurial设置(大约20名开发人员)中,我们的CI系统(Hudson)从每个周期的可能ok回购中退出,然后构建和测试,并分别处理每个分支


    一句话:所有你想要设置的工具可能都已经存在了,但是把它们粘在一起将是一次性的工作。

    比我的答案更详细+1.我喜欢远程服务器端自动处理的主动推送。谢谢VonC和Ry4an-你的回答真的很有帮助。让我朝着正确的方向思考(希望:)谢谢VonC和Ry4an-你的回答真的很有帮助。让我朝着正确的方向思考(希望:)