Объединить ветку со стволом


119

Используя TortoiseSVN, мне нужно внести изменения, которые я сделал в ветке, а затем объединить их со стволом.

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

В принципе, я хочу, чтобы мой ствол выглядел точно так же, как ветка.

В мире pre-svn я бы просто скопировал файлы в папку ветки, удалил файлы в папке ствола, а затем скопировал ветку в ствол.

В TortoiseSVN, я попробовал Reintegrate a branch, Merge a range of revisionsи Merge two different trees. Кажется, что на самом деле ничего не меняет багажник. Я также пробовал делать разветвления поверх ствола. Это дает мне ошибку, говоря, что ствол уже существует.

Ответы:


157

В твоем случае:

  1. Переключить рабочую копию в транк (SVN Switch)
  2. Слить ветку в рабочую копию (SVN Merge)
  3. Убедитесь, что все по-прежнему компилируется и работает
  4. Зафиксируйте рабочую копию (ствол)
  5. Подумайте об убийстве ветки

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


Обновить

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

Единственные ветки, которые я не убиваю, - это ветки обслуживания и выпуска, если конкретный выпуск больше не поддерживается.

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


Комментарий, который вы добавили на шаге 5, вероятно, лучше было бы шагом 1? Если вы хотите использовать «Повторно интегрировать ветвь» из диалогового окна слияния TortoiseSVN, необходимо сначала объединить все изменения из ствола (или базовой ветки).
jbvo

1
Является ли первый шаг (переключение рабочей копии на транк) необходимым только в том случае, если нет отдельной рабочей копии ветки и ствола?
Jeff B

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

10

Думаю, в TortoiseSVN 1.8.5, Merge | Слияние двух разных деревьев должно работать. Когда вы объединяете ветку / тег обратно в магистраль, фокус в том, что URL-адрес From является магистралью, а To - тегом / ветвью. Странно, но факт.

Источник: Объединение

Для каталогов, которых нет в вашей рабочей копии, но которые находятся в теге / ветке, вы можете получить конфликтные ошибки. Просто примите конфликт и повторите слияние.


После того, как вы выполните инструкции на сайте tortoisesvn, убедитесь, что после слияния вы зафиксировали ствол без каких-либо изменений. Я попытался снять отметку с нескольких вещей, которые я не хотел фиксировать, что вызывало некоторое нерекурсивное предупреждение о фиксации. Также подумайте об удалении ветки, как сказано в инструкции.
goku_da_master

6

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

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


2
Следует проявлять особую осторожность при «копировании» файлов. Используйте что-то вроде экспорта TortoiseSVN, чтобы не повредить скрытые каталоги svn.
Milimetric

3

Я использую TortoiseSVN 1.9.3, сборка 27038.

Выполните следующие шаги, чтобы объединить ветку в магистраль.

1) Щелкните правой кнопкой мыши рабочую копию ствола и выберите вариант ниже.

введите описание изображения здесь

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

введите описание изображения здесь

3) В поле From: введите полный URL-адрес папки транка. Это может звучать неправильно, но помните, что ствол - это начальная точка, в которую вы хотите добавить изменения ветки. В поле Кому: введите полный URL-адрес папки ветки функции.

введите описание изображения здесь

4) Нажмите "Далее" и выполните тестовое слияние.

введите описание изображения здесь

5) Если тестовое объединение прошло успешно, нажмите кнопку "Объединить".

6) После успешного слияния зафиксируйте изменения в стволе.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.