Каков наилучший способ объединить ветвь функций с основной веткой в ​​Subversion? - PullRequest
6 голосов
/ 06 ноября 2008

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 06 ноября 2008

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

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

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

3 голосов
/ 06 ноября 2008

Шаг 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-book .

2 голосов
/ 06 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...