2009-06-17 2 views
51

У меня есть то, что я думал, был простой сценарий - с помощью TortoiseSVN:SVN - удалось объединить ветку обратно в ствол - многочисленные деревопереработки конфликты

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

2) Испытание & Разработка продолжалась как обычно на багажнике.

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

3,1) присоединяемого ствол (по диапазону ревизий) в мою ветви-b2 рабочей копию разрешения конфликтов в процессе слияния ,

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

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

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

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

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

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

ответ

71

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

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

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

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

+0

Это имеет смысл - даст ему первый шанс на a.m. Из любопытства и желания здравого смысла в будущем, что такое стиль слияния после 1.5? –

+2

1.5 и далее вы можете пропустить диапазон ревизий в первом слиянии и использовать что-то вроде «svn merge -reintegrate branch» для второго слияния (не можете вспомнить специфику Guvi TSVN). С другой стороны, после реинтеграции вам придется перераспределить, потому что реинтеграция делает что-то смешное для mergeinfo. – Rytmis

+52

Спасибо @Rytmis, мне просто удалось снять это, но я хочу предложить перевод для пользователей Tortoise. 1) Переключите рабочую копию в ветвь (если она еще не указана) 2) Щелкните правой кнопкой мыши рабочую копию, TortoiseSVN> Merge> «Объединить ряд исправлений», нажмите «Далее» 3) URL для слияния с = , щелкните Next, Merge 4) Переключите рабочую копию в Trunk 5) Щелкните правой кнопкой мыши рабочую копию, TortoiseSVN> Merge> «Объединить два разных дерева», нажмите «Далее» 6) От: Trunk (используйте HEAD-версию) To: Branch (используйте ревизию HEAD) 7) Нажмите «Далее», «Объединить». 8) Запишите свою рабочую копию. DONE – mikesigs

3

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

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

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

+0

Спасибо. Из всего обсуждения SO об этой проблеме «конфликта с деревом» это помогло мне исправить это правильно. –

1

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

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

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

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

1

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

1

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

шаги Высокопоставленные сделать ствол точно как ветвь или тег:

  1. Выгрузка из ствола.
  2. Использование рабочей копии соединительной линии, слияние с соединительной линии на ветку/метку.
  3. Commit. Команды

Пример 'СВН' командной строки:

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

Это слияние «2-URL», которое согласно документам предназначено для объединения двух ветви в один (рабочий каталог). Таким образом, оба URL-адреса являются источниками, а пункт назначения - рабочим. Вероятно, это не то, что требуется OP. –

0

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

После того, что я могу слиться с ветки в ствол.

Смежные вопросы