【问题标题】:merging changes from a maven release branch yields conflicts due to changed versions in poms由于 poms 中的版本更改,合并来自 maven 发布分支的更改会产生冲突
【发布时间】:2011-04-03 01:55:24
【问题描述】:

按照标准做法,我有一个用于功能开发的 svn 主干,以及一个用于构建版本的分叉分支。该分支是使用 maven 发布插件创建的,该插件也用于创建发布。碰巧的是,偶尔会在分支上修复错误,这些更改需要合并回主干。为了不错过任何更改,我希望能够简单地将完整的分支合并回主干。

现在我的问题是,由于发布插件增加了版本号,项目/依赖版本在分支和主干中出现了分歧,因此我在所有 pom 中都遇到了许多冲突。有谁知道如何重组分支创建、我的 pom 或发布以避免这些合并冲突?

【问题讨论】:

    标签: svn version-control merge maven-2 maven-release-plugin


    【解决方案1】:

    这是以这种方式一起使用 Maven POM 和 Subversion 分支的固有特性。你有几个选择。

    1. 从 SVN 中的修订开始进行合并,以避免碰撞快照的提交。有时更简单,但不是理想的合并方式,但仍可能导致冲突
    2. 检查冲突并使用mine-conflict (mc) 作为选项,如果POM 更改是唯一的。如果你对此有信心,可以使用SVN的--accept mine-conflict
    3. 允许它们被错误地合并,然后使用版本的插件通过versions:set 重置版本

    【讨论】:

    • 感谢您精心撰写的回复。尤其是 3. 帮了我很多。
    【解决方案2】:

    我们也有相同的约定,但是我们使用 git:在 master 分支中,我们的 maven 版本始终是 0.0.1-SNAPSHOT,而对于每个分支,maven 分支都是 BRANCH_NAME-SNAPSHOT。

    我们解决了从分支到主控的相同合并问题,此外,开发人员忘记运行 versions:set 并在主控中提交错误的版本。

    我们创建了一个 git 钩子来防止此类错误提交:

    #!/bin/bash
    # To enable this hook:
    # ln -s  ~/src/common-arsbigdata/common-fw/src/main/resources/bin/pre-commit ~/src/common-arsbigdata/.git/hooks/pre-commit
    
    BRANCH_NAME=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
    echo "current branch: $BRANCH_NAME"
    for file in $(find . -name 'pom.xml' -not -path "*/target/*" -not -path "*/bin/*"); do
        VERSION=`head $file | grep "<version>" | sed -e 's,.*<version>\([^<]*\)-SNAPSHOT</version>.*,\1,g'`;
        if [[ $BRANCH_NAME == "master" ]]; then
                if [[ $VERSION != "0.0.1" ]]; then
                        echo $file
                        echo "expected version 0.0.1, actual version is $VERSION"
                        exit 1
                fi
        elif [[ $VERSION != $BRANCH_NAME ]]; then
                echo $file
                echo "expected version $BRANCH_NAME, actual version is $VERSION"
                exit 1
        fi
    done
    

    我们在 git repo 中管理钩子,并在每台开发机器上为它在.git/hooks 创建一个软链接

    【讨论】:

      【解决方案3】:

      根据 Brett Porter 的回答,我想我会做以下事情:

      重新组织分支:冲突的原因似乎是发布插件在创建 Subversion 分支之后更改了主干和分支版本。为了解决这个问题,我会

      1. versions:set 碰撞主干版本。
      2. 使用release:branch创建分支,但设置-DupdateWorkingCopyVersions=false,因为我已经设置了版本。

      这将避免合并冲突。剩下的是,每当我将分支合并回主干时,我现在也将合并到分支版本中。再次,versions:set 来救援。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-14
        • 2018-03-01
        • 1970-01-01
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多