2010-08-24 1 views
4

Следуя стандартной практике, у меня есть ствол svn для разработки функций и разветвленная ветка для создания релизов. Филиал был создан с использованием плагина релиза maven, который также используется для создания выпусков. Как это бывает, случайная ошибка будет зафиксирована на ветке, и эти изменения должны быть объединены обратно в багажник. Чтобы не пропустить никаких изменений, я хотел бы просто объединить всю ветку обратно в багажник.Слияние изменений с веткой релиза maven приводит к конфликтам из-за измененных версий в poms

Теперь моя проблема в том, что я получаю многочисленные конфликты во всех моих пемах, потому что версии проектов/зависимостей расходились в ветке и в магистрали из-за расширения версий версий плагина релиза. Кто-нибудь имеет представление о том, как реструктурировать создание филиалов, моих попов или освобождать, чтобы избежать конфликтов слияния?

ответ

3

Это связано с тем, что ветви Maven POM и Subversion объединены таким образом. У вас есть несколько вариантов.

  1. Сделайте свои слияния, начиная с ревизии в SVN, чтобы избежать фиксации, которая натолкнула снимок. Иногда проще, но не идеальный способ слияния и все же может закончиться конфликтами
  2. проверить конфликты и использовать mine-conflict (mc) в качестве опции, если изменения POM являются единственными. Если вы уверены в этом, вы можете использовать SVN-х --accept mine-conflict
  3. позволяют им быть неправильно объединены и использовать плагин от версии, чтобы сбросить версию впоследствии с versions:set
+0

Благодарим Вас за ваш хорошо написанный ответ. Особенно 3. мне очень помогли. – Nico

0

На основании ответа Бретт Портера, я думаю, что я ll выполните следующие действия:

Реорганизация ветвления: причиной конфликтов является то, что плагин выпуска изменяет версии соединительной линии и ветви после, создавая ветвь Subversion. Чтобы обойти это, я сделаю следующее:

  1. bump the trunk version with versions:set.
  2. использовать release:branch, чтобы создать ветку, но установить -DupdateWorkingCopyVersions=false, потому что я уже установил версию.

Это позволит избежать конфликтов слияния. Остается то, что всякий раз, когда я объединяю ветку обратно в туловище, я теперь буду сливаться и в версии ветки. Опять же, versions:set на помощь.

0

У нас также есть одно и то же соглашение, но мы используем git: в главной ветке наша версия 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 для него на каждом Dev машине