SVN - невозможно объединить ветку обратно в ствол - многочисленные конфликты деревьев - PullRequest
51 голосов
/ 17 июня 2009

У меня есть простой сценарий - TortoiseSVN:

1) Я создал ветку (B2) приложения (для работы над реализацией спрайтов изображений и JAWR).

2) Тестирование и разработка на магистрали продолжались как обычно.

3) Я пересоздал ветку пару раз за последние несколько дней:

3.1) Объединенная магистраль (по диапазону ревизий) с моей рабочей копией branch-b2, разрешение конфликтов во время слияния.

3.2) (после тестирования ветки-b2), я фиксирую пере-основанную ветку-b2.

Все это сработало, как я и ожидал. Но слияние ветви обратно в ствол происходит со мной:

4) После всех обновлений, зафиксированных в branch-b2; Я уверен, что я делаю SVN Обновление по транку и Branch-B2.

5) Затем я пытаюсь объединить (диапазон ревизий) из ветви b2 в транк. Однако для любого нового файла, который был добавлен в ствол и впоследствии добавлен в ветку-b2, когда я перебазировал его, я получаю конфликт дерева. Я не уверен, как правильно разрешать эти конфликты.

Самый типичный совет, который я видел, это либо удалить файлы конфликтов деревьев из ствола, а затем объединить ветку; или удалите весь ствол, скопируйте файлы ветви и затем зафиксируйте их как новую версию в стволе. Ни один из этих вариантов не кажется хорошей идеей - во-первых, это боль, и оба, похоже, потеряют историю изменений файлов.

Что я сделал не так и как мне это исправить?

Ответы [ 6 ]

71 голосов
/ 17 июня 2009

Похоже, вы используете стиль слияния до 1.5 и пытаетесь реинтегрировать ветку в ствол. В этом случае вы сначала должны убедиться, что все изменения в стволе были объединены с веткой, а затем вместо слияния диапазона ветки с рабочей копией, которая указывает на ствол, вы хотите объединить «ИЗ ствола». @HEAD TO branch @ HEAD "с рабочей копией, указывающей на транк. По сути:

"Дайте мне все изменения, которые мне понадобятся, чтобы сделать ствол идентичным ветке".

Это работает, если вы уже объединили все изменения соединительных линий в ветку, потому что тогда единственная разница между соединением ствола и ответвлением - это изменения, сделанные в ветви.

Имеет смысл? :)

3 голосов
/ 07 октября 2009

Я исследовал ту же проблему. Это «особенность» в Turtoise SVN 1.6.5. TortoiseSVN 1.5 отлично работает с нашими репозититами (SVN 1.5). TortoiseSVN 1.6.5 при перебазировании добавляет файлы из основной линии как НОВЫЕ (без сохранения истории слияния).
И реинтеграция ветки приводит к тому, что эти файлы рассматриваются как конфликтующие с основной линией.

Я решил проблему, используя функцию TortoiseSVN 1.6 «Реинтегрировать ветку». Он специально предназначен для функциональных веток.

- Алексей Корсунь

2 голосов
/ 14 ноября 2014

Вот еще немного информации, чтобы внести свой вклад в ответ @Rytmis, который поможет мне сделать это прямо.

Шаги высокого уровня для создания ствола в точности как ветка или тег:

  1. Оформить заказ из багажника.
  2. Используя рабочую копию транка, объединить транк с веткой / тегом.
  3. Commit.

Пример команд командной строки 'svn':

svn checkout <trunk url>
cd trunk
svn merge <trunk url> <branch/tag url>
svn commit -m "<message>"
1 голос
/ 16 июля 2012

Выберите ревизии для слияния, выбрав опцию «Слить диапазон проекций» с помощью TortoiseSVN. Это предотвратит конфликты дерева для одних и тех же файлов, возникающих снова для каждой операции слияния.

1 голос
/ 23 октября 2009

Я не мог понять, как работало вышеупомянутое решение, поэтому моя работа отличается. Сначала я убедился, что ветка содержит все изменения из ствола.

1) Я получил свежую копию сундука. 2) Я экспортировал ветку во временное местоположение, используя экспорт svn черепахи. 3) Я использовал проводник Windows, чтобы скопировать все дерево веток в ствол и переписал все файлы. 4) Я использовал команду проверки на изменения на черепахе и включил флажок для всех невидимых файлов. 5) Я выбрал все файлы и нажал «Добавить».

Вы должны использовать решения, которые не были созданы, чтобы невидимые файлы не включали вывод.

Не могу дождаться, пока мы обновимся до 1.5 +

0 голосов
/ 28 июня 2017

Я думаю, что решил эту проблему. 1. Щелкните правой кнопкой мыши «ветку», которую вы слили. 2. Нажмите Черепаха SVN >> Слияние 3. «Объединить ряд ревизий» и далее 4. ПРОВЕРЬТЕ «Обратное слияние» !!! , URL для слияния из "ветви", конкретный диапазон "недавно слитая ревизия" и Next 5. Далее 6. SVN Commite

После этого я могу слиться из ветви в ствол.

...