SVN - невозможно объединить ветку обратно в магистраль - многочисленные древовидные конфликты

У меня есть то, что я считал простым сценарием - используя TortoiseSVN:

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

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

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

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

3.2) (после тестирования ветки-b2), я беру редизайн-ветвь-b2.

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

4) После всех обновлений, совершенных в branch-b2; Я уверен, что я обновляю SVN на соединительной линии и ветке-b2.

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

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

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

Ответ 1

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

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

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

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

Ответ 2

Я исследовал ту же проблему. Это "особенность" в Tortoise SVN 1.6.5. TortoiseSVN 1.5 отлично работает с нашей репозитотией (SVN 1.5). TortoiseSVN 1.6.5 при перезагрузке добавляет файлы с mainline как NEW (без сохранения истории слияния).
И реинтеграция реляционных ветвей при рассмотрении этих файлов как противоречащих mainline.

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Высокие этапы создания соединительной линии точно как ветка или тег:

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

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

svn checkout <trunk url>
cd trunk
svn merge <trunk url> <branch/tag url>
svn commit -m "<message>"

Ответ 6

Думаю, я решил эту проблему. 1. Щелкните правой кнопкой мыши "ветвь", которую вы объединили. 2. Щелкните Tortoise SVN → Merge 3. "Объединить ряд изменений" и "Далее" 4.!!! ПРОВЕРЬТЕ "Обратное слияние"!!!, URL для слияния из "ветки", определенного диапазона "недавно объединенная версия" и Next 5. Далее 6. SVN Commite

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