Свн слияние ствола и веток - PullRequest
11 голосов
/ 09 марта 2010

У меня огромный проект.

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

Мне нужно объединить исправления ошибок из магистрали в ветку 1 при добавлении новых функций в ветку.

В конце мне нужно объединить все изменения обратно в ствол и сделать из него новый тег.

Так что мне нужно исправление ошибки для версии 1, новая ветка для версии 2 и, конечно, объединение исправлений ошибок в версии 2.

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

Может кто-нибудь дать мне совет, что делать?

Привет

Ответы [ 4 ]

6 голосов
/ 25 марта 2010

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

Если исправление в соединительной линии не может быть объединено с ветвью (-ями), решение состоит в том, чтобы создать «ветку обратного порта». Здесь вы либо частично объединяете исправление из ствола, либо частично переписываете то же исправление, если код слишком отличается. Также предлагается записывать слияния, которые вы обычно выполняете для устранения проблемы, поэтому отслеживание слияний помогает увидеть, была ли проблема исправлена.

Если вы исправляете /branches/1.2.x, соглашение о присвоении имен, используемое проектом Subversion, заключается в создании ветви обратного порта с именем 1.2.xr [REVNUM], где REVNUM указывает ревизию, которую вы бэкпортируете, или 1.2.x -issue [ISSUENUM], где ISSUENUM указывает на проблему, которую вы решаете.

Когда вы закончите создание исправления backport, вы можете объединить его с версией с

svn checkout .../branches/1.2.x myproduct-1.2.x
svn merge --reintegrate .../branches/1.2.x-r123 myproduct-1.2.x

После реинтеграции ветки ветку следует удалить.

0 голосов
/ 29 марта 2010

После объединения изменений из ствола в ветвь я считаю, что лучше всего объединить ответвление обратно в ствол, используя слияние по 2 URL. Насколько я понимаю, - реинтеграция , это просто более простой синтаксис для слияния 2-URL, который иногда завершается неудачей (хотя я в последний раз использовал реинтеграцию в версии 1.5).

svn merge url://trunk@mergedRev url://branch@HEAD .

Где mergedRev - ревизия, когда вы в последний раз сливали ствол в ветвь.

Если вы используете простую инструкцию слияния, все изменения, которые вы слили из ствола в ветвь, будут рассматриваться как изменения, которые необходимо добавить в ствол при слиянии назад. Первый URL в слиянии с 2 URL указывает svn, какие изменения произошли из ствола. Это должно значительно уменьшить конфликты при слиянии.

Что касается структуры вашего репозитория, я могу предложить запись в блоге (см. Ниже, поскольку мне разрешено использовать только одну ссылку в моем сообщении) с ariejan.net

запись в блоге: ariejan.net/2006/11/24/svn-how-to-structure-your-repository/

0 голосов
/ 29 марта 2010

Прежде всего, я предлагаю вам взглянуть на документацию SVN , предложенную @SanderRijken, и посмотреть, что такое ветка функций и релизов.

Но по звучанию вашего вопроса я предполагаю, что ваша основная проблема - другая. А именно, что никакое слияние вообще не «работает» (т. Е. Все дают конфликты там, где вы их не ожидаете). Поэтому, возможно, вы могли бы уточнить, что вы делаете точно (например, опубликовать команду, которую вы используете для слияния)?

0 голосов
/ 09 марта 2010

Сначала вы должны создать «тег» для вашей версии 1, которая является выпущенной версией вашего продукта. Версия 2 проекта будет тогда продолжением ствола, а не веткой версии 2. Единственная причина, по которой вам нужно было бы создать ветку, - это исправление ошибок в (выпущенной) версии 1. Все, что вы делаете для новой версии, будет сделано в стволе, если у вас нет причин не делать этого.

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