Насколько я понимаю, наиболее распространенный (и рекомендуемый) способ обработки ветвлений и слияний в Subversion:
- создание ветки как копии ствола
- делает деструктивныйразработка на ветке и регулярная разработка на стволе
- При этом регулярно объединяйте изменения транк -> ветка, чтобы избежать слишком сильного расхождения ветки.С отслеживанием слиянием (
svn:mergeinfo
) я могу просто запустить svn merge ^/trunk
, и SVN автоматически извлечет все необъединенные изменения из ствола. - Как только работа над веткой будет завершена, объедините все обратно (в стволе:
svn merge --reintegrate ^/branch/foo
), затем сбросьте ветвь.
(описано, например, в книге SVN, глава Основное объединение ).
Теперь моя проблема: пока это работаетхорошо для «функциональных веток», иногда также нужны «ветки релиза», которые представляют доставку / готовность к отправке версий.
С ветвями релиза, по моему опыту, слияние должно происходить в обоих направления:
- исправления ошибок из ветки выпуска должны быть объединены в ствол (ветвь -> ствол)
- , но иногда исправление ошибки из ствола (или даже новая функция) считаетсякритический для версии выпуска (или обновления к выпуску), и поэтому должен быть объединен магистралью -> ветка
Я не нашел ничего твердого о том, как SVN и svn:mergeinfo
будут обращаться с этим.Могу ли я выполнять слияние в обоих направлениях («двунаправленное слияние»), и при этом svn может отслеживать объединенные ревизии?
Есть ли подводные камни?На что обращать особое внимание?