按照标准做法,我有一个用于功能开发的 svn 主干,以及一个用于构建版本的分叉分支。该分支是使用 maven 发布插件创建的,该插件也用于创建发布。碰巧的是,偶尔会在分支上修复错误,这些更改需要合并回主干。为了不错过任何更改,我希望能够简单地将完整的分支合并回主干。
现在我的问题是,由于发布插件增加了版本号,项目/依赖版本在分支和主干中出现了分歧,因此我在所有 pom 中都遇到了许多冲突。有谁知道如何重组分支创建、我的 pom 或发布以避免这些合并冲突?
按照标准做法,我有一个用于功能开发的 svn 主干,以及一个用于构建版本的分叉分支。该分支是使用 maven 发布插件创建的,该插件也用于创建发布。碰巧的是,偶尔会在分支上修复错误,这些更改需要合并回主干。为了不错过任何更改,我希望能够简单地将完整的分支合并回主干。
现在我的问题是,由于发布插件增加了版本号,项目/依赖版本在分支和主干中出现了分歧,因此我在所有 pom 中都遇到了许多冲突。有谁知道如何重组分支创建、我的 pom 或发布以避免这些合并冲突?
这是以这种方式一起使用 Maven POM 和 Subversion 分支所固有的。你有几个选择。
mine-conflict
( ) 作为选项。mc
如果你对此有信心,你可以使用 SVN 的--accept mine-conflict
versions:set
我们也有相同的约定,但是我们使用 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 中的钩子,并在每台开发机器上为它创建一个软链接
根据布雷特波特的回答,我想我会做以下事情:
重新组织分支:冲突的原因似乎是发布插件在创建 Subversion 分支后更改了主干和分支版本。为了解决这个问题,我会
versions:set
。release:branch
创建分支,但设置-DupdateWorkingCopyVersions=false
是因为我已经设置了版本。这将避免合并冲突。剩下的是,每当我将分支合并回主干时,我现在也将合并到分支版本中。再次,versions:set
救援。