2010-08-24 34 views
4

中已更改的版本之间的冲突,我有一个用于功能开发的svn主干以及用于构建版本的分支分支。该分支已经使用Maven发布插件创建,该插件也用于创建发布。碰巧,偶尔的错误将会在分支上被修复,并且这些改变需要被合并回主干。为了不错过任何更改,我希望能够将完整的分支简单地合并到主干中。从maven版本分支合并更改会产生冲突,这是由于poms

现在我的问题是,我得到我的所有劲歌众多的冲突,因为项目/依赖性版本分支和主干分叉,由于释放插件递增的版本号。有没有人有一个想法如何重组分支创建,我的朋友或释放,以避免这些合并冲突?

回答

3

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

  1. 做你的合并开始与SVN的修订,以避免提交快照的提交。有时更简单,但不是理想的合并方式,但仍可能以冲突结束
  2. 检查冲突并使用mine-conflictmc)作为选项,如果POM更改是唯一的。如果您确信这一点,你可以使用SVN的--accept mine-conflict
  3. 让他们无法正确合并,使用该版本的插件与versions:set
+0

谢谢你你写得很好的回应。特别是3.帮助了我很多。 – Nico 2010-08-25 07:23:35

0

基于布雷特·波特的回答之后重置版,我想我将执行以下操作:

重新组织分支:冲突的原因似乎是释放插件在创建Subversion分支后更改中继和分支版本。要解决这个问题,我会

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

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

0

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

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

我们创建了一个混帐挂钩,防止这种错误提交:

#!/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仓库里面的钩,每个开发机器上创建的.git/hooks它的软链接

相关问题