Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Mercurial中维护开发/发布分支的最佳实践?_Mercurial_Branch_Tortoisehg - Fatal编程技术网

Mercurial中维护开发/发布分支的最佳实践?

Mercurial中维护开发/发布分支的最佳实践?,mercurial,branch,tortoisehg,Mercurial,Branch,Tortoisehg,在我的办公室,我们正在从VisualSourceSafe(6.0!)过渡到Mercurial,我正试图找出处理我们的情况的最佳“Mercurial”方法。目前,在任何给定的项目存储库中,我们都维护它的多个版本:例如,对于项目A,我们有一个用于ProjA-Dev、ProjA-Rel1和ProjA-Rel2的VSS Repo(一个Dev Repo,过去两个版本各一个) 目前,(几乎)所有的新工作都是在dev repo中进行的,然后认为有必要回滚到Rel1或Rel2的更改是手动完成的(文件从VSS签出

在我的办公室,我们正在从VisualSourceSafe(6.0!)过渡到Mercurial,我正试图找出处理我们的情况的最佳“Mercurial”方法。目前,在任何给定的项目存储库中,我们都维护它的多个版本:例如,对于项目A,我们有一个用于ProjA-Dev、ProjA-Rel1和ProjA-Rel2的VSS Repo(一个Dev Repo,过去两个版本各一个)

目前,(几乎)所有的新工作都是在dev repo中进行的,然后认为有必要回滚到Rel1或Rel2的更改是手动完成的(文件从VSS签出到它们自己的工作目录,然后使用一些diff工具仅复制适当的更改)。在某个时刻,人们认为新的版本会出现,因此开发报告被克隆,它变成Proj*-Rev1,而以前的Proj*-Rev1变成Proj*-Rev2,Proj*-dev就像什么都没发生一样继续进行。在我看来,必须有一种更好的方法,用更现代的工具(如Mercurial)来实现这一点

我目前的想法是,每个项目都应该有自己的存储库,Dev/Rel1/Rel2的区别最好由不同的命名分支来处理。然而,我无法理解/看到/思考的是如何在这样的环境下完成我们当前的工作流程。如果我们遵循当前的工作流程,那么开发分支中的工作将有增无减,某些更改(不是全部!)将回滚/转移到Rel分支。我知道这可以通过Mercurial的移植/移植功能来实现,但它似乎还没有很好地在龟甲中得到支持。而且,更重要的是,过去的答案似乎表明,解决这一问题的最佳办法是不让事情一开始就进入这种状态


问题是,考虑到当前的工作流,避免这种状态的最佳方法是什么?我读过很多关于Mercurial和branching的指南(包括这里的很多回复),但没有看到这个问题的明确答案

我不知道这是否适合你,但我可以给你一些有关的信息。我们每六周发布一次Firefox,我们有几个不同的分支并行运行:“每夜”从存储库构建,所有活动开发都在其中进行,“aurora”从存储库构建,我们尝试稳定代码以供发布,“beta”从存储库构建,我们在其中执行最终验证,并从存储库中发布构建。每个存储库都作为单独的克隆进行维护

从一个分支移动到另一个分支有点复杂。这些分支都有着共同的历史,但由于aurora和beta分支在发布前的准备阶段获得了移植到它们身上的选定安全性和稳定性修复程序,它们有着不同的历史。本段开头的链接中记录了确切的过程,但可以归结为:“标记mozilla中央存储库;标记并关闭mozilla aurora的当前负责人;将mozilla central作为新负责人推送到mozilla aurora”。对极光->β重复相同的过程

将开发中的补丁向后移植到aurora或beta分支只是移植变更集的问题。如果您愿意,您可以使用
hg transplant
命令,我记录了我是如何做到这一点的


尽管如此,对于大多数项目来说,这可能是矫枉过正。我们使用单独的存储库克隆而不是命名分支,因为我们为命名分支提供的工具不是很好,实际上我们更喜欢它提供的隔离。您可以在这里使用命名分支来实现更轻的流程,只需在准备就绪时从默认分支创建一个新的命名分支,并在默认情况下继续开发时根据需要进行后端口修复。

我不知道这是否完全适合您,但我可以为您提供一些有关的信息。我们每六周发布一次Firefox,我们有几个不同的分支并行运行:“每夜”从存储库构建,所有活动开发都在其中进行,“aurora”从存储库构建,我们尝试稳定代码以供发布,“beta”从存储库构建,我们在其中执行最终验证,并从存储库中发布构建。每个存储库都作为单独的克隆进行维护

从一个分支移动到另一个分支有点复杂。这些分支都有着共同的历史,但由于aurora和beta分支在发布前的准备阶段获得了移植到它们身上的选定安全性和稳定性修复程序,它们有着不同的历史。本段开头的链接中记录了确切的过程,但可以归结为:“标记mozilla中央存储库;标记并关闭mozilla aurora的当前负责人;将mozilla central作为新负责人推送到mozilla aurora”。对极光->β重复相同的过程

将开发中的补丁向后移植到aurora或beta分支只是移植变更集的问题。如果您愿意,您可以使用
hg transplant
命令,我记录了我是如何做到这一点的


尽管如此,对于大多数项目来说,这可能是矫枉过正。我们使用单独的存储库克隆而不是命名分支,因为我们为命名分支提供的工具不是很好,实际上我们更喜欢它提供的隔离。您可以在这里使用命名分支来实现更轻量级的流程,只需在准备就绪时在默认分支的基础上创建一个新的命名分支,并根据需要在默认情况下继续开发时在那里进行后端口修复。

处理这一问题的一个概念是升级组,因此可以将开发/测试/rel周期视为一个质量维度(同一代码“叶”)与正常的“功能集”类型的分支是正交的。我不熟悉Mercurial,因此无法直接帮助。例如,为什么不发布DEV中的某些内容?我不想显得迟钝,只需要理解原因。如果是因为某个功能未完成