需要帮助mercurial分支结构

时间:2011-05-20 11:34:52

标签: mercurial dvcs branching-and-merging

我们刚刚从SVN切换到HG并讨论了分支结构。我们提出了以下结构,需要一些评论,并想知道这种结构是否会在将来引发问题。

                  * Tag v1.2.0
                  |
                  * Merge Branch v1.2.0 into Default 
                 /|
                / | 
               *  |
               |\ |
Merge v1.1.2   | \| 
 fixes into    |  * Tag v1.1.2
 v1.2.0 branch |  |
               |  * Merge Branch v1.1.2 into Default
               |  |\
               |  |  \
   Commit code *  |   * Commit a bug fix
               |  |   |
               |  |   |
Merge v1.1.1   *  |   * Branch v1.1.2
 fixes into    |\ |  /
 v1.2.0 branch | \| /
               |  * Tag v1.1.1
               |  |
               |  * Merge Branch v1.1.1 into Default
   Commit code *  |\
               |  |  * Commit a bug fix
               |  |  |
 Branch v1.2.0 *  |  * Branch v1.1.1
                \ | /
                 \|/
                  * Tag v1.1.0
  • 每个标记代表版本发布。
  • 错误修复只发生在v0.0.x分支
  • 微小的改进和次要的新功能(对UI的外观更新等)仅在v0.x.x分支上发生
  • 默认分支(中心)始终具有稳定且经过测试的代码

问题:

  • 将v1.2.0合并到默认分支后,我们能够从标签v1.1.2创建v1.1.3的分支并重新标记/标记v1.1.3吗?
  • 这种结构是否构成一个有效的结构,或者我们是否试图提出荒谬的东西并且已经有了解决方案/答案?

更新:在讨论了Lasse V. Karlsen提供的解决方案后,我们终于同意在发布v1.2.0之后我们不需要发布v1.1.3。我们的用户如果想要接收更新,则应更新到v1.2.0行,v1.1.2将是v1.1.x行的最后一次更新。所以,这样就消除了第一个问题。感谢伟大的建议和提示Lasse。

谢谢大家!

1 个答案:

答案 0 :(得分:3)

您无法在默认时间轴上追溯引入1.1.3作为变更集,您可以希望的最佳方式如下:

  1. 在您发布1.1.2
  2. 的位置更新回默认值
  3. 分支出1.1.3并提交
  4. 默认情况下将其与1.1.2标记合并,这将在默认分支上创建另一个头,与您正在处理的1.2时间轴平行
  5. 标记为1.1.3并发布
  6. 将这个新头部合并到前一个头部,将错误修正版合并到1.2.x
  7. 警告:我在测试时发现的一件事是,当我将1.1.3默认内容合并到1.2.0默认内容时,必须合并.hgtags。由于标签总是从最末端的变更集中读取(我可能在这里错了),这可能表明这不是最好的方法。至少我可能会等待标记,直到我将1.1.3合并到1.2.0时间轴(即下图中的最顶层合并)。

    我可以在此处找到我的测试存储库:https://lassevk.kilnhg.com/Repo/StackOverflow/answers/SO6071322

    它看起来像这样:

                      * Merge Branch 1.1.3 into Default
                      |\
                      | \
                      |  * Tag v1.1.3
                      |  |
                      |  * Merge Branch v1.1.3 into 1.1.x Default 
                      |  |\
                      |  | \
    Tag v1.2.0        *  |  * Commit a bug fix
                      |  |  |
                      |  |  |
    Merge Branch      *  |  * Branch v1.1.3
    v1.2.0 into      /|  | /
    Default         / |  |/
                   *  |  +
                   |\ | /
    Merge v1.1.2   | \|/ 
     fixes into    |  * Tag v1.1.2
     v1.2.0 branch |  |
                   |  * Merge Branch v1.1.2 into Default
                   :  :
    

    这是否是一个好主意,不确定,我还没有在Mercurial中管理一个包含大量此类并行版本的项目。