4

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

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

4

3 回答 3

4

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

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

我们也有相同的约定,但是我们使用 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/hooks我们管理 git repo 中的钩子,并在每台开发机器上为它创建一个软链接

于 2013-12-30T18:01:47.300 回答
0

根据布雷特波特的回答,我想我会做以下事情:

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

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

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

于 2010-08-25T07:48:01.977 回答