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
Version control 在Mercurial版本中管理流程工件_Version Control_Mercurial_Release Management - Fatal编程技术网

Version control 在Mercurial版本中管理流程工件

Version control 在Mercurial版本中管理流程工件,version-control,mercurial,release-management,Version Control,Mercurial,Release Management,我想知道使用Mercurial创建包含提供流程执行证据的工件的发布修订版的最佳方法是什么。例如,我们希望附上系统测试结果、检查表、发行说明等,这样,如果客户对我们进行了审核,我们就可以轻松地证明我们执行了流程。由于我们产品的安全方面,这对我们很重要 我们的发布管理流程类似下图。所有开发商都在本地回购协议中进行开发,并定期向main推进。Main是最新和最好的,但对于开发团队之外的内部工程目的来说也不一定是安全的 当我们想要为客户或其他内部工程部门创建发布时,我们从发布候选分支(例如RC1)开始。

我想知道使用Mercurial创建包含提供流程执行证据的工件的发布修订版的最佳方法是什么。例如,我们希望附上系统测试结果、检查表、发行说明等,这样,如果客户对我们进行了审核,我们就可以轻松地证明我们执行了流程。由于我们产品的安全方面,这对我们很重要

我们的发布管理流程类似下图。所有开发商都在本地回购协议中进行开发,并定期向main推进。Main是最新和最好的,但对于开发团队之外的内部工程目的来说也不一定是安全的

当我们想要为客户或其他内部工程部门创建发布时,我们从发布候选分支(例如RC1)开始。如果需要任何修复,我们将向RC分支提交。测试在此分支上进行。当RC被确定为良好时,更改被合并回主

我们认为我们想要做的是合并到一个发布分支中。然而,我们有一个与工件相关的鸡和蛋的问题:我们希望包含在发行版修订版中的工件包含修订版的哈希。这提供了明确的可追溯性,即测试和其他过程步骤是在此精确版本上执行的。但是,要添加这些项,我需要创建一个新的修订,在创建之前,我显然不知道该修订的哈希是什么。我想知道是否有某种方法可以“修改”修订版而不更改哈希

我能想到的唯一方法是,例如,在下图中,创建一个修订版RC2.3,其中包含必要的流程工件,但实际上将RC2.2合并到发行版中

当然,我还有另一个问题,那就是将RC2.2合并到发行版将生成一个新的散列。所以,我的作品又过时了。因此,下一个问题是是否有某种方法让发布分支“指向”RC2.2

顺便说一句,如果有必要,我们愿意改变这个过程。我们使用这种方法的原因是:

  • CI系统正在监视main并启动一系列构建,并在每次推送时执行自动化单元测试。main经常发生更改,我们不希望人们使用它

  • 开发可以在main上继续进行,而不会影响发布

  • Releases分支的任何修订都会在我们的CI平台上启动一组不同的任务,包括创建field flash实用程序的发行版和所需的映像(我们正在开发固件)。这就是我们向外部实体提供发布的方式


您对mercurial的使用似乎有点复杂,因为所有这些合并都在进行,处理起来会很痛苦。 您正在使用mercurial的分支功能,但似乎忽略了其他两个重要功能:

  • 标签
  • 樱桃采摘
  • 我将在下面介绍mercurial的一般用法,以突出这些功能:

    请注意,以下内容仅适用于需要长期维护不同版本的项目。

    主分支(在mercurial中称为default)专门用于当前应用程序的开发。 每次开发人员完成功能的开发/修改/更新时,他/她都会将其更改推到默认状态,然后每个人和我们的CI(jenkins)都可以使用默认状态,这将确保没有任何内容被破坏

    当我们到达一个新版本即将发布的阶段时,就会创建一个分支。参照您的架构,分支可以命名为MY_PRODUCT_1\u 0

    开发人员将继续处理默认分支,在即将发布的版本中需要提交的任何时候,相关变更集都将通过命令
    hg graft REV_changeset
    (cherry pick)复制到MY_PRODUCT_1_0分支(注意,您也可以从MY_PRODUCT_1_0分支复制到默认)

    因此,您基本上可以选择从默认分支到当前版本的变更集,而不必合并这两个分支

    这要求开发人员推动干净的原子变更集,这是mercurial首先应该做的事情。

    随着您的提交在MY_PRODUCT_1_0中的发展,您可以将其多次标记为MY_PRODUCT_1_0_RC_1、MY_PRODUCT_1_0_RC_2、,。。。 在此分支上进行最终更改集时,您只需将其标记为MY_PRODUCT_1_0_PR_1_0

    然后,您一开始只会得到两个分支,默认分支(开发分支)和MY_PRODUCT_1_0(您的第一个版本),随着时间的推移,当您需要发布产品的新版本时,您将创建一个新分支MY_PRODUCT_2_0,并按上述方式重新启动循环

    使用这种方法,您可以确保在发布中只进行了所需的更改,而没有在合并分支时得到的额外更改


    如果不让我知道的话,我希望我说得够清楚。

    你对mercurial的使用似乎有点复杂,因为这里到处都是合并,处理起来会很痛苦。 您正在使用mercurial的分支功能,但似乎忽略了其他两个重要功能:

  • 标签
  • 樱桃采摘
  • 我将在下面介绍mercurial的一般用法,以突出这些功能:

    请注意,以下内容仅适用于需要长期维护不同版本的项目。

    主分支(在mercurial中称为default)专门用于当前应用程序的开发。 每次开发人员完成功能的开发/修改/更新时,他/她都会将其更改推到默认值,然后每个人和我们的CI(jenkins)都可以使用默认值,这将确保没有任何更改br
    Main         A--B--C--D--E--F--G--H--I--J--K--L---------M-------------N  
                           \            /          \                     /  
    RC1                     RC1.0--RC1.1            \                   /  
                             \                       \                 /  
    RC2                       \                        RC2.0--RC2.1--RC2.2  
                               \                                       \   
                                \                                       \  
    Releases                    ER1.0-----------------------------------PR1.0
    
    Main      A--B--C--D--E--F--G--H--I--J--K--L---------M-------------N  
                     \                /
    2.x               2.0-RC1--2.0-RC2
    
    Main      A--B--C--D--E--F--G--H--I--J--K--L-------M-------------N  
                     \            /                   /
    2.x               2.0-RC1--2.0RC2 -- ... --2.0-RC8
    
    Main      A--B--C--D--E--F--G--H--I--J--K--L-------M-----------N  
                     \            /                   /           /
    2.x               2.0-RC1--2.0RC2 -- ... --2.0-RC8 -- T -- 2.0
    
    Main      A--B--C--D--E--F--G--H--I--J--K--L-------M-----------N  
                     \            /                   /           /
    2.x               2.0-RC1--2.0RC2 -- ... --2.0-RC8 -- T -- 2.0 -- 2.1-RC1