Как бороться с ветвью долгоживущих функций?

#svn #tortoisesvn #branch

#svn #tortoisesvn #ветвь

Вопрос:

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

Я пытаюсь объединить магистраль с веткой функций, чтобы поддерживать ветку функций в актуальном состоянии, но получаю много конфликтов, и я только что понял, почему:

После разрешения конфликта я передаю фиксированный файл в ветку, однако магистральная версия файла НЕ изменяется. У него ВСЕГДА будут конфликты слияния с файлом ветви, даже после разрешения конфликта. Например, смотрите конфликт ниже:

Первый конфликт

Затем я исправляю этот конфликт, внося изменения в версию файла ветви, а затем фиксирую его в ветке. Ветвь теперь выглядит так:

Ветвь после исправления конфликта

Теперь, если я выполню другое слияние, я все равно получу конфликт в строке 3, потому что магистральная версия файла никогда не менялась:

Все еще существует конфликт, поскольку магистральная версия файла никогда не изменялась

Вопрос: Как вы справляетесь с ветвями долгоживущих функций с точки зрения слияния и разрешения конфликтов?

Комментарии:

1. Почему вы говорите, что последний случай ( i.stack.imgur.com/aks0W.png ) приведет к конфликту? В «Ветке» есть только одна дополнительная строка, объединение не должно быть проблематичным.

2. Какую версию клиента и сервера Subversion вы используете? Какой формат файловой системы репозитория FSFS есть в вашем репозитории? Это формат 3 или выше?

Ответ №1:

Какую версию SVN / TortoiseSVN вы используете?

Фиксируете ли вы изменения mergeinfo при слиянии из магистрали в ветку?

Насколько я могу судить, конфликтов не должно быть, если вы используете современную версию SVN (1.10.x или новее) и если вы правильно выполняете изменения mergeinfo.

svn:mergeinfo Свойство автоматически поддерживается Subversion всякий раз, когда вы запускаете svn merge. Его значение указывает, какие изменения, внесенные в данный путь, были реплицированы в соответствующий каталог.

Для получения более подробной информации ознакомьтесь с разделом Mergeinfo и Previews в svnbook.

Комментарии:

1. Возможно, что их репозиторий имеет формат FSFS версии 2 или 1 и должен быть обновлен. Отслеживание слияния / svn:mergeinfo было реализовано в SVN 1.5 с форматом FSFS 3. SVN 1.5 был выпущен более 10 лет назад. Тем не менее, вы все равно можете найти серверы SVN 1.4, потому что администраторы не потрудились их обновить — SVN просто работает. Настоятельно рекомендуется обновление до SVN 1.10.x.

2. Спасибо за ваши ответы. Мы запускаем SVN 1.11. Я не уверен, почему, но когда я пытаюсь выполнить слияние из магистрали в ветку в первый раз, я получаю конфликт, исправляю конфликт, фиксирую исправленную версию в ветку (поскольку слияние происходит с рабочей копией). Затем я выполнил бы еще одно слияние, и тот же конфликт, который я только что исправил, появился бы снова.

3. Мы также используем AnkhSVN, плагин для Visual Studio, который интегрируется с SVN. После слияния я бы исправил все конфликты и зафиксировал все объединенные изменения, которые появятся на вкладке «Ожидающие изменения» в плагине AnkhSVN. Однако я совершенно забыл зафиксировать элементы, которые не отображались на этой вкладке (по какой-либо причине). Затем я выполнил коммит с корневого уровня, который показал мне ВСЕ объединенные файлы, и это, похоже, решило проблему.