Существует ли в Subversion трехстороннее слияние? - PullRequest
1 голос
/ 05 августа 2020

Я знаю, что существует слияние syn c, которое копирует следующий набор изменений из ствола. Согласно docs , слияние syn c работает следующим образом:

Subversion найдет все изменения в 'trunk', которые еще не были объединены в ' особенность 'ветка. В данном случае это единственный диапазон r100: 200. На диаграмме выше L отмечает левую сторону (trunk@100), а R отмечает правую сторону (trunk@200) источника слияния. Разница между L и R будет применена к пути целевой рабочей копии.

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

Ветка функции последний раз была синхронизирована с основной веткой до версии X. Таким образом, разница между trunk@X и feature@HEAD содержит полный набор изменений, которые реализовать эту функцию и никаких других изменений. Эти изменения применяются к стволу.

Оба из них звучат как двустороннее слияние, которое кажется намного менее надежным, чем трехстороннее слияние, как в git.

Изменить: Итак, похоже, что SVN делает 3-стороннее слияние, но описания слияния syn c и реинтеграции выше (и те, что были найдены с некоторых других сайтов ), все еще звучат как двухстороннее слияние. Если и чем это отличается от того, что делает git при слиянии? В этом сообщении предполагается, что трехстороннее слияние практически одинаково для нескольких VCS, и что разница в том, как отслеживаются слияния. Значит ли это, что SVN выбирает только свое базовое дерево иначе, чем git?

1 Ответ

0 голосов
/ 05 августа 2020

Короче говоря, SVN, похоже, имеет функцию трехстороннего слияния. См. Файл subversion/libsvn_client/merge_elements.c строка 112 в последнем исходном коде (1.14.0). В комментарии говорится:

Выполнить трехстороннее слияние дерева. Запишите результат в * MERGE_RESULT_P. Задайте * CONFLICTS_P для описания любых конфликтов или задайте * CONFLICTS_P значение null, если их нет.

...