管理Mercurial中的发布分支

管理Mercurial中的发布分支,mercurial,branch,Mercurial,Branch,最近我从SVN转到Mercurial。现在,我想知道如何根据良好实践在Mercurial中实现预期的分支工作流程,希望其他开发人员了解存储库中发生的事情 这是工作流程: 通常我有一个主干/默认分支,在那里可以处理当前的发行版系列。假设是1.x。同时,我使用Branch2.x开发下一个主要版本。此分支中的更改可能是激进的,因此与trunk/default/1.x分支合并在这里没有意义。 一段时间后,2.x上的工作可能会完成,2.0版也会发布。现在我希望2.x分支是新的默认/主干分支,当前的默认/

最近我从SVN转到Mercurial。现在,我想知道如何根据良好实践在Mercurial中实现预期的分支工作流程,希望其他开发人员了解存储库中发生的事情

这是工作流程:

  • 通常我有一个主干/默认分支,在那里可以处理当前的发行版系列。假设是1.x。同时,我使用Branch2.x开发下一个主要版本。此分支中的更改可能是激进的,因此与trunk/default/1.x分支合并在这里没有意义。
    • 一段时间后,2.x上的工作可能会完成,2.0版也会发布。现在我希望2.x分支是新的默认/主干分支,当前的默认/主干是1.x分支
    • 重复这个过程,可能会出现一个新的3.x分支。与之前一样,如果3.0发布,3.x应该成为新的默认分支,而当前的默认分支应该成为2.x分支(再次)
  • 我的问题不是这个工作流程是否好(我想它根本没有错)。我的问题是,我在Mercurial中认识到这一点的方式是否可以被视为良好实践,或者是否有更好的机会

    下面是我计划如何管理Mercurial的分支机构

    从包含当前版本系列1.x代码的单个分支的存储库开始:

    $ hg init
    $ echo "hello world" > file1.txt
    $ hg ci -A -m "Initial commit of 1.x code"
    
    $ hg up default
    $ echo "Minor adjustments specific for 1.x" > file3.txt
    $ hg ci -A -m "Minor adjustments"
    
    开始使用2.x版:

    $ hg branch 2.x
    $ hg ci -m "Create new branch for 2.x development"
    $ echo "Big new feature for 2.x" > file2.txt
    $ hg ci -A -m "Add big new feature"
    
    同时,在当前版本系列(1.x)中做一些工作:

    过了一段时间2.0版就准备好了,哎呀!将默认分支设为1.x,将2.x设为默认:

    现在创建一个新的分支3.x并使用它,同时使用默认值。同样,3.0准备就绪一段时间后,又到了管理分支名称的时候了:

    $ hg up default
    $ hg branch --force 2.x # (reuse previously closed 2.x branch name)
    $ hg ci -m "Make default branch to 2.x branch"
    $ hg up 3.x
    $ hg ci --close-branch -m "Close branch 3.x"
    $ hg branch --force default
    $ hg ci -m "Make former 3.x branch to new default"
    
    回购协议现在看起来可能是这样的(“o”是头):

    我不确定的主要问题是,重用分支名称并使用默认的分支名称是否是好的做法

    这个问题有很多文字-抱歉-但我想清楚我在做什么。

    以下是我要做的:

    设为默认值
    您的“主线”分支。此分支的提示是代码的“当前发布到公众”版本。关键的错误修复可以直接提交到此分支,并合并到开发分支中

    要开始使用2.0版,请创建
    2.0-dev
    分支。将2.0的更改提交到该分支,并将主线(
    default
    )中的关键错误修复合并到该分支中。完成2.0后,将
    2.0-dev
    合并到
    default
    中,并将结果标记为
    2.0

    这样做意味着您不必担心更改分支名称,而且您可以很容易地将主线上的关键错误修复合并到开发分支中

    当您同时处理多个未来版本(比如2.1和3.0)时,它也可以很好地扩展。您可以定期将2.1更改合并到3.0中,以保持3.0最新

    您将得到如下图形:

    $ hg glog -l 1000
    @       changeset:  25:efc0096f47c0  tip
    |       summary:    Added tag 3.0 for changeset d1a7fc3d7d77
    |
    o       changeset:  24:d1a7fc3d7d77  3.0
    |\      summary:    Merge in the redesign changes.
    | |
    | o     changeset:  23:b5b69d24c8f7 3.0-dev
    | |     summary:    Finish 3.0 redesign.
    | |
    | o     changeset:  22:4c2f98fac54b 3.0-dev
    |/|     summary:    Merge in the latest changes to 2.1/mainline.
    | |
    o |     changeset:  21:37df04521032
    | |     summary:    Added tag 2.1 for changeset 39ecc520fc0a
    | |
    o |     changeset:  20:39ecc520fc0a  2.1
    |\ \    summary:    2.1 development is done.
    | | |
    | o |   changeset:  19:208f3f9236af 2.1-dev
    | | |   summary:    Finish the 2.1 work.
    | | |
    | | o   changeset:  18:4a024009a9d6 3.0-dev
    | | |   summary:    More redesign work.
    | | |
    | | o   changeset:  17:00c416888c25 3.0-dev
    | |/|   summary:    Merge in changes from the 2.1 branch to keep the redesign current.
    | | |
    | o |   changeset:  16:a57e781a0db1 2.1-dev
    | | |   summary:    More 2.1 work.
    | | |
    | | o   changeset:  15:ddeb65402a61 3.0-dev
    | | |   summary:    More redesign work.
    | | |
    +---o   changeset:  14:90f5d7a8af9a 3.0-dev
    | | |   summary:    Merge in the fire fixes.
    | | |
    | o |   changeset:  13:78a949b67bb9 2.1-dev
    |/| |   summary:    Merge in the fire fixes.
    | | |
    o | |   changeset:  12:6dfe9d856202
    | | |   summary:    Oh no everything is on fire, fix it in the mainline.
    | | |
    | o |   changeset:  11:86767671dcdb 2.1-dev
    | | |   summary:    Smaller changes for 2.1.
    | | |
    | | o   changeset:  10:25dec81d2546 3.0-dev
    | | |   summary:    Work more on the redesign.
    | | |
    +---o   changeset:  9:42c7d689fb24 3.0-dev
    | |     summary:    Start working on a complete redesign.
    | |
    | o     changeset:  8:3da99186ca7d 2.1-dev
    |/      summary:    Start working on 2.1.
    |
    o       changeset:  7:9ba79361827d
    |       summary:    Added tag 2.0 for changeset 755ed5c5e291
    |
    o       changeset:  6:755ed5c5e291  2.0
    |\      summary:    Merge in the dev branch for 2.0.
    | |
    | o     changeset:  5:44a833fcc838 2.0-dev
    | |     summary:    Finish work on 2.0.
    | |
    | o     changeset:  4:d7ba6aae1651 2.0-dev
    |/|     summary:    Merge in the critical fix.
    | |
    o |     changeset:  3:968049f1b33a
    | |     summary:    Fix a critical bug on the main branch.
    | |
    | o     changeset:  2:917869609b25 2.0-dev
    | |     summary:    More work on the new version.
    | |
    | o     changeset:  1:f95798b9cb2e 2.0-dev
    |/      summary:    Start working on version 2.0.
    |
    o       changeset:  0:8a3fb044d3f4
            summary:    Initial commit.
    

    我认为你应该考虑这个问题。p>
    我不是git的忠实粉丝,但这种模式对mercurial也非常有用。

    我听说这种工作流是推荐的工作流,但我不确定如果主线中有一些对devel分支没有意义的更改,它的适用性如何。我想这取决于我如何将最新的主线变更合并到devel分支中。如何处理主线中不需要的更改?是否可以表达类似“从主线合并变更集23和27,但忽略所有其他变更集(或在合并后撤消它们)”?如果要合并23和27并忽略其他变更集,您需要移植扩展:如果要合并所有内容并撤消23和27,您将正常合并,然后
    hg backout 23--Merge;hg backout 27——在dev分支上进行merge
    。我认为
    backout
    命令最适合我的目的。我已经测试过了,它做了我想做的事情。当只需要进行几次更改就可以退出时,它似乎表现得很好。否则,如果有很多不需要的更改,将使历史图表膨胀,并将意味着大量的手动工作。。但只要不是这样,我对你的建议完全满意:)谢谢!哪种解决方案更好取决于您希望在dev分支中的主线中有多少变更集。如果您希望开发分支中有90%的分支和10%的分支被跳过,那么回退就是最好的选择。如果你想要10%的开发分支和90%的跳过,移植会更好。我很高兴它有帮助。如果您想要一个更加灵活的DVCS分支指南,您可能会喜欢我写的这篇文章:对这个主题提供了一个很好的介绍。
    o Branch default (3.x)
    |
    | o Branch 2.x
     \|
      | o Branch 1.x
       \|
        |
        .
    
    $ hg glog -l 1000
    @       changeset:  25:efc0096f47c0  tip
    |       summary:    Added tag 3.0 for changeset d1a7fc3d7d77
    |
    o       changeset:  24:d1a7fc3d7d77  3.0
    |\      summary:    Merge in the redesign changes.
    | |
    | o     changeset:  23:b5b69d24c8f7 3.0-dev
    | |     summary:    Finish 3.0 redesign.
    | |
    | o     changeset:  22:4c2f98fac54b 3.0-dev
    |/|     summary:    Merge in the latest changes to 2.1/mainline.
    | |
    o |     changeset:  21:37df04521032
    | |     summary:    Added tag 2.1 for changeset 39ecc520fc0a
    | |
    o |     changeset:  20:39ecc520fc0a  2.1
    |\ \    summary:    2.1 development is done.
    | | |
    | o |   changeset:  19:208f3f9236af 2.1-dev
    | | |   summary:    Finish the 2.1 work.
    | | |
    | | o   changeset:  18:4a024009a9d6 3.0-dev
    | | |   summary:    More redesign work.
    | | |
    | | o   changeset:  17:00c416888c25 3.0-dev
    | |/|   summary:    Merge in changes from the 2.1 branch to keep the redesign current.
    | | |
    | o |   changeset:  16:a57e781a0db1 2.1-dev
    | | |   summary:    More 2.1 work.
    | | |
    | | o   changeset:  15:ddeb65402a61 3.0-dev
    | | |   summary:    More redesign work.
    | | |
    +---o   changeset:  14:90f5d7a8af9a 3.0-dev
    | | |   summary:    Merge in the fire fixes.
    | | |
    | o |   changeset:  13:78a949b67bb9 2.1-dev
    |/| |   summary:    Merge in the fire fixes.
    | | |
    o | |   changeset:  12:6dfe9d856202
    | | |   summary:    Oh no everything is on fire, fix it in the mainline.
    | | |
    | o |   changeset:  11:86767671dcdb 2.1-dev
    | | |   summary:    Smaller changes for 2.1.
    | | |
    | | o   changeset:  10:25dec81d2546 3.0-dev
    | | |   summary:    Work more on the redesign.
    | | |
    +---o   changeset:  9:42c7d689fb24 3.0-dev
    | |     summary:    Start working on a complete redesign.
    | |
    | o     changeset:  8:3da99186ca7d 2.1-dev
    |/      summary:    Start working on 2.1.
    |
    o       changeset:  7:9ba79361827d
    |       summary:    Added tag 2.0 for changeset 755ed5c5e291
    |
    o       changeset:  6:755ed5c5e291  2.0
    |\      summary:    Merge in the dev branch for 2.0.
    | |
    | o     changeset:  5:44a833fcc838 2.0-dev
    | |     summary:    Finish work on 2.0.
    | |
    | o     changeset:  4:d7ba6aae1651 2.0-dev
    |/|     summary:    Merge in the critical fix.
    | |
    o |     changeset:  3:968049f1b33a
    | |     summary:    Fix a critical bug on the main branch.
    | |
    | o     changeset:  2:917869609b25 2.0-dev
    | |     summary:    More work on the new version.
    | |
    | o     changeset:  1:f95798b9cb2e 2.0-dev
    |/      summary:    Start working on version 2.0.
    |
    o       changeset:  0:8a3fb044d3f4
            summary:    Initial commit.