Каков наилучший способ объединить ветвь функций с основной веткой в ​​Subversion?

Мы используем ветки функций в Subversion для нашей разработки, которая является очень удобным способом хранения кода в системе контроля версий, который еще не готов для основной линии. Тем не менее, всякий раз, когда я иду, чтобы объединить ревизию ветки объектов с основной, это становится болью. Прямо сейчас я иду через следующие шаги:

  1. Проверьте исходную версию ветки функции в новый каталог
  2. Проведите различие между моей текущей разработкой и исходными каталогами ветвей функций с помощью такого инструмента, как Beyond Compare
  3. Проверьте текущую основную версию в новый каталог
  4. Объединить новые / измененные файлы в текущий основной каталог.
  5. Выполните разницу, используя мою IDE, чтобы убедиться, что все файлы правильно извлечены / добавлены в Subversion
  6. Скомпилируйте и протестируйте
  7. совершить

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

Я считаю, что в Subversion 1.5 есть способ слить ветку в основную линию, но мы все еще используем Subversion 1.4. Что другие люди используют, чтобы упростить этапы объединения функциональной ветви в Subversion с их основной разработкой? Вы используете разные инструменты? Используете ли вы функцию слияния в Subversion 1.5?

6 svn
6.11.2008 18:18:33
Я выполняю те же шаги, но использую SourceGear's DiffMerge в качестве инструмента сравнения. Это PITA, я думаю, что TFS справился очень хорошо, и я скучаю.
cfeduke 6.11.2008 18:21:02
До обновления до 1.5 (роскошь, которую я имел) я делал те же самые шаги с тем же самым инструментом (Beyond Compare 3, который великолепен). Это было кропотливым и иногда утомительным, но у меня никогда не было проблем. С SVN 1.5 (см. Ниже) жизнь намного проще ...
Dan 7.11.2008 04:08:17
4 ОТВЕТА
РЕШЕНИЕ

Я сейчас использую новую функцию --reintegrate в Subversion 1.5, и я думаю, что это удивительно. Это намного проще и намного менее подвержено ошибкам, чем ручной способ. Недостатком является, однако, то, что новые функции слияния требуют, чтобы и хранилище, и клиент были установлены на 1.5, а изменения в хранилище 1.5 не позволяют использовать его любым клиентам, кроме 1.5 ... так что для получения функции слияния это в основном сценарий "все или ничего".

Что касается ваших первоначальных вопросов, вам просто нужно очень тщательно отслеживать, какие основные ревизии ветки вы добавили в вашу рабочую ветку во время разработки. Тем не менее, даже с функцией --reintegrate в 1.5 все равно важно убедиться, что реинтегрированная рабочая копия главной ветви выглядит правильно и компилируется перед фиксацией. Это просто существенно облегчает жизнь (особенно для веток с более долгим сроком действия), потому что вам не нужно вести строгий журнал того, что вы изменили, и когда вы интегрировали изменения из других ветвей в свою ветку.

Документация к примечаниям к выпуску на subversion.tigris.org написана очень хорошо, и я бы порекомендовал кратко ее просмотреть, чтобы увидеть все изменения между 1.4 и 1.5 и хорошее описание новых возможностей слияния.

6
6.11.2008 18:25:58
Хорошее объяснение. Я недавно обновился до 1.5 и считаю, что это ОСНОВНОЕ улучшение по сравнению с 1.4. Ваше описание выше на месте.
Dan 7.11.2008 04:06:48
Стоит перейти на 1.5, возможности, которые обеспечивает отслеживание слиянием, того стоят.
Jim T 7.08.2009 07:35:49

Шаг 1, 2, 4 и 5 встроены в Subversion, команда 'svn merge' делает это. На вашей рабочей копии основного типа введите 'svn merge -r startrev: lastref svn: // repository / branchurl'. Startref и lastref будут обозначать окно ревизии, которое должно быть объединено с основной линией. 'svn: // repository / branchurl' должен быть URL вашей ветки.

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

Подробнее об этом читайте в Subversion-книге .

3
6.08.2009 22:48:37

Если это ваша ветка, вы хотите объединиться с основной веткой (то есть вы не интегратор, который делает это для других разработчиков), вот что вам нужно сделать:

  • Запишите ревизию, в которой вы в последний раз слили основную линию в свою ветку (чтобы синхронизировать ее). Давайте назовем это "LASTSYNC"
  • извлеките ветку mainline в новый каталог (например, MergeFeatureBranchToTrunk), создайте его
  • в этой ветке используйте svn merge "LASTSYNC":HEAD svn://path/to/FeatureBranch .
  • разрешать конфликты (если есть)
  • компиляции
  • тестовое задание
  • проверьте изменения с помощью инструмента diff, чтобы убедиться, что все выглядит хорошо
  • совершить обратно на основную линию
2
6.11.2008 18:27:44

Посмотрите на svnmerge ; он отслеживает «что я слил? что я решил не слить?» часть работы для вас, и полагается на команду svn "слияние", чтобы сделать тяжелую работу.

1
6.11.2008 19:29:02