具有多个分支的maven项目修补程序版本的Git合并策略

时间:2013-08-21 11:36:33

标签: git maven release conflict hotfix

处理在具有多个修补程序分支的git流环境中准备maven版本导致的重复合并冲突的最佳做法是什么?

(见http://nvie.com/posts/a-successful-git-branching-model/

在这种情况下,需要多个修补程序分支来维护至少两个应用程序修订版。 oldstable的修复程序会定期合并到newstable修补程序分支中。那些发布分支之间的那些合并导致了重复出现的合并冲突,我将在下面解释:

每个分支的pom.xml工件版本都是唯一的。

示例:

master                  - <version>1.2.0</version> (Contains the latest release)
  \ 
  dev                   - <version>1.3.0-dev-SNAPSHOT</version> (Contains changes for the next release)
  |\
  | hotfix-oldstable    - <version>1.1.1-hotfix-SNAPSHOT</version> (Contains new hotfixes for the oldstable version)
  |   \ 
  |   release-oldstable - <version>1.1.1-SNAPSHOT</version> (Is used to prepare the release)
  \
   \
    hotfix-newstable    - <version>1.2.1-hotfix-SNAPSHOT</version> (Contains new hotfixes for the newstable version)
     \ 
      release-newstable - <version>1.2.1-SNAPSHOT</version> (Is used to prepare the release)

我目前的工作流程如下:

预发布合并:

  1. release-oldstable 中合并 hotfix-oldstable
  2. 使用maven发布插件更新 release-oldstable 中的版本。这有效地改变了pom.xml工件版本。
  3. release-newstable 中合并 hotfix-newstable
  4. release-newstable 中合并 release-oldstable (导致冲突 - 稍后介绍)
  5. 使用maven发布插件更新 release-newstable 中的版本。
  6. 稳定发布分支:

    在该步骤之后,两个释放分支都需要稳定。这是一个重要的步骤,因为必须将提交从oldstable合并到newstable,因为newstable版本很可能也受到oldstable版本中检测到的问题的影响。从 release-oldstable release-newstable 的合并会导致冲突,因为在两个分支中都修改了pom.xml。

    当然,这可以通过使用樱桃选择来规避,但我正在寻找替代解决方案。

    执行发布:

    1. release-oldstable 中执行maven发布。这也改变了pom.xml。
    2. release-newstable 中执行maven发布。这也改变了pom.xml。
    3. 发布后合并:

      1. 将release-oldstable合并到hotfix-oldstable
      2. 更新 hotfix-oldstable 中的版本,并在版本中添加“hotfix”分类器。
      3. release-newstable 合并到dev,master和 hotfix-newstable
      4. 更新dev中的版本(添加“dev”分类器并提升版本)。
      5. 更新 hotfix-newstable 中的版本,并在版本中添加“hotfix”分类器。
      6. 现在为下一个版本重复该过程。

        预发布合并:

        1. release-oldstable 中合并 hotfix-oldstable (没有冲突,因为release-oldstable在发布后合并中合并到hotfix-oldstable)
        2. 使用maven发布插件更新 release-oldstable 中的版本。这有效地改变了pom.xml工件版本。
        3. release-newstable 中合并 hotfix-newstable (没有冲突,因为release-newstable已合并到hotfix-newstable)
        4. release-newstable 中合并 release-oldstable 此步骤导致冲突,因为pom.xml在预发布步骤中已更改,并在“稳定版本分支”步骤中合并。
        5. 使用maven发布插件更新 release-newstable 中的版本。

        6. 目前我只能想到这些选择:


          更新

          我最后选择了最后一个选项。我添加了一个预构建脚本,它更新了修补程序分支构建的pom.xml版本。该脚本只是使用maven release plugin update-versions目标为pom.xml版本标记添加分类器。这有效地防止了对修补程序分支中的pom.xml文件的更改,并使合并变得更加容易。

3 个答案:

答案 0 :(得分:2)

您是否考虑过离开Git Flow?我工作的项目在我们第一次使用Git时使用它;然而,它已经到了这样的程度,它正在阻碍而不是它的帮助。使用它来执行以前版本的修补程序的问题最终导致我们决定一劳永逸地删除它。回想起来,这是一个很好的决定,我们应该早点完成。

今天,我们只是将简单的功能分支与标签合并为主。我们没有遇到任何问题,之前发布的hofixes不再那么痛苦。

答案 1 :(得分:1)

也许这对你来说也是一个解决方案?在这里查看我的答案:https://stackoverflow.com/a/26866992/1313037

答案 2 :(得分:0)

我发现了另一个工具,它允许以非常干净的方式处理pom.xmls中版本的合并冲突。

https://github.com/ralfth/pom-merge-driver