gpt4 book ai didi

具有多个分支的Maven项目修补程序版本的Git merge 策略

转载 作者:太空狗 更新时间:2023-10-29 13:14:44 25 4
gpt4 key购买 nike

解决在具有多个修补程序分支的git flow环境中准备Maven版本而引起的重复 merge 冲突的最佳实践是什么?

(请参阅http://nvie.com/posts/a-successful-git-branching-model/)

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

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

例子:

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)

我当前的工作流程是这样的:

发行前 merge :
  • 将可修复程序-oldstable merge 到release-oldstable
  • 使用maven发行插件更新release-oldstable中的版本。这有效地更改了pom.xml Artifact 版本。
  • merge 修补程序-newstable至发行版-newstable
  • 将release-oldstable merge 到release-newstable中(引起冲突-稍后描述)
  • 使用maven发行插件更新release-newstable中的版本。

  • 稳定发布分支:

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

    当然,可以使用“樱桃小贴士”来避免这种情况,但我正在寻找替代解决方案。

    执行发布:
  • 在release-oldstable中执行Maven发布。这也会更改pom.xml。
  • 在release-newstable中执行Maven发布。这也会更改pom.xml。

  • 发布后 merge :
  • 将发布-旧表 merge 到修补程序-旧表中
  • 在hotfix-oldstable中更新版本,并向该版本添加“hotfix”分类器。
  • 将发行版-newstable merge 到dev,master和hotfix-newstable
  • 更新dev中的版本(添加“dev”分类器并提高版本)。
  • 在hotfix-newstable中更新版本,并向该版本添加“hotfix”分类器。

  • 现在,为下一个版本重复该过程。

    发行前 merge :
  • 在release-oldstable中 merge hotfix-oldstable(无冲突,因为release-oldstable在发布后 merge 中已 merge 到hotfix-oldstable)
  • 使用maven发行插件更新release-oldstable中的版本。这有效地更改了pom.xml Artifact 版本。
  • merge hotfix-newstable到release-newstable中(没有冲突,因为release-newstable已 merge 到hotfix-newstable中)
  • 在release-newstable中 merge release-oldstable
    此步骤导致冲突,因为pom.xml在预发行步骤中已更改,并在“稳定发行分支”步骤中 merge 。
  • 使用maven发行插件更新release-newstable中的版本。


  • 目前,我只能想到以下选项:
  • 在hotfix-oldstable分支
  • 中进行的每个提交中,在hotfix-newstable中使用git cherry-pick -x
  • 使用git rere(http://gitfu.wordpress.com/2008/04/20/git-rerere-rereremember-what-you-did-last-time/)(我还没有尝试过。我很想听听别人到目前为止如何做到这一点)
  • 使用自定义脚本 merge pom.xml中的冲突
  • 更改在不同分支之间处理Maven版本的方式。


  • 更新:

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

    最佳答案

    您是否考虑过放弃Git Flow?我刚开始使用Git时,我从事的项目就使用了它。但是,问题在于,它所带来的阻碍远不止于帮助。使用它做以前版本的修补程序的问题最终导致我们决定一劳永逸地删除它。回想起来,这是一个明智的决定,我们应该早点做。

    今天,我们只是做一些简单的功能分支,连同标记一起 merge 到母版中。我们没有任何问题,以前发行版的补丁不再那么麻烦。

    关于具有多个分支的Maven项目修补程序版本的Git merge 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356354/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com