Как правильно объединить ветки, разветвленные от разных версий ствола? - PullRequest
5 голосов
/ 18 мая 2011

Наша команда использует Eclipse для разработки программного продукта, и недавно мы перешли на Subversion для управления исходным кодом и управления версиями. Поначалу наша команда все еще работала непосредственно со стволом, так как мы были новичками в способе контроля версий в Subversion, и вещи нужно было по-прежнему извлекать.

В какой-то момент я сделал свою первую настоящую ветку из ствола, чтобы сделать разработку для конкретного проекта в нашем продукте. Предположим, что ветвь называется DEV_PROJ.

Позже, когда наша команда лучше знала, как работать с Subversion из Eclipse, я поместил команду в нашу первую реальную ветку разработки, не для конкретного подпроекта, а для отслеживания различных версий. Предположим, что ветка называется DEV_VERS. Сейчас мы работаем над этой веткой и больше не привязываемся к стволу. DEV_VERS был разветвлен от последней версии транка, и с тех пор не было никаких коммитов в транк.

Между двумя ветвями прошло около двух / трех месяцев, и было много изменений в стволе, прежде чем я сделал ветку версии. Теперь пришло время объединить изменения из DEV_PROJ с веткой DEV_VERS, чтобы включить проект в нашу новую ветку версий.

Сначала я произвел слияние последней версии транка с моей веткой DEV_PROJ (прямое слияние?), Думая, что это минимизирует разницу между двумя ветвями, сохраняя изменения, специфичные для проекта.

То, что я сейчас пытаюсь и у меня проблемы, это слияние DEV_PROJ с веткой DEV_VERS. Щелкните правой кнопкой мыши команду «Объединить / объединить мой проект DEV_VERS», чтобы начать объединение, можно выбрать одну из трех вкладок: «URL», «2 URL», «Реинтегрировать». Насколько я знаю, это не слияние реинтеграции, которое будет происходить от ветви к стволу, а не между ветвями, которые не связаны напрямую. Мне также не нужно объединять две ветви с моей веткой, поэтому я пропускаю вкладку 2 URL.

Так что я выбираю первый, URL. В качестве источника я беру свой проект из ветви DEV_PROJ, Редакции: Начать с копии, Глубина: Рабочая копия. Во второй попытке я также решил игнорировать родословную. При обеих попытках я нажимаю кнопку «Просмотр», чтобы получить представление о том, какие файлы являются целевыми для слияния.

Что я вижу, так это то, что есть много файлов, которые могут быть объединены, но они не были изменены в моей ветке DEV_PROJ. Таким образом, процесс слияния (subversion) видит гораздо больше кандидатов на слияние, чем я ожидал. Файлы, которые я добавил в ветку DEV_PROJ, отображаются как «Добавленные», но в обзоре слияния множество файлов, которые, как я знаю, я не изменил в этой ветке, отображаются как «Измененные» или «Конфликт дерева».

Мои вопросы:

  1. Это правильный способ слияния ветвей? Если нет, то нельзя ли это сделать напрямую с помощью меню слияния (URL, 2URL, Reintegrate)?
  2. Является ли мой первый шаг (прямая линия слияния в DEV_PROJ) причиной того, что есть кандидаты на слияние, которых там не должно было быть?
  3. Если нет прямого способа правильно объединить эти ветви, то я вижу только один вариант. То есть объединить DEV_PROJ со стволом (реинтегрировать), а затем объединить ствол с ветвью DEV_VERS (прямое объединение). Будет ли это правильный способ сделать это? Если так, то это единственный способ сделать это?

Затмение: Helios Service Release 2, сборка: 20110218-0911
SVN сервер: 1.6.15
Плагин Eclipse SVN: SVNKit 1.3.2 (2.2.2.I20100512-1900) // SVN Connector (2.2.2.I20100512-1900) // SVN Team Provider (0.7.9.I20100512-1900)

1 Ответ

6 голосов
/ 19 мая 2011

Если я правильно понимаю ваш вопрос, это состояние вашего проекта:

        _________________ B        DEV_PROJ
       / 
    A /
---------------------------------- trunk
             C \
                \_____________ D   DEV_VERS

И вы хотите, чтобы все изменения, начиная с A -> B в вашей ветке DEV_VERS.

ЕслиИтак, я бы сделал следующее (ниже приведен эквивалент командной строки, но найти Eclipse SVN GUI-эквивалент должно быть легко):

  1. Найти версию A:

    • svn log --stop-on-copy URL_OF_DEV_PROJ
    • Самый ранний номер редакции коммита - это номер редакции точки A
  2. Найтиверсия B:

    • Если вы хотите объединить все изменения в ветви DEV_PROJ, значение B просто HEAD
  3. Оформить заказ DEV_VERS:

    • svn co URL_OF_DEV_VERS
  4. Внутри каталога проверяемогоКод из шага 3, объедините изменения от A до B следующим образом:

    • svn merge -r<RevisionOfA>:HEAD URL_OF_DEV_PROJ .

Короче говоря,то, что вы делаете, берете разница между A и B и слияние в DEV_VERS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...