Что произойдет, если между последним слиянием и реинтеграционным слиянием в SVN будет фиксация?

Обычно при реинтеграции ветки SVN в магистраль мы создаем такую ​​историю:

trunk   A---B---D---F---H
             \       \ /
branch        C---E---G---X

где G — слияние, H — реинтеграционное слияние, а X удаление функциональной ветви. Я также понимаю, что есть разница в алгоритме слияния, который SVN использует для G и H. Все идет нормально.

Однако меня беспокоит одна вещь: Этот ответ цитирует документацию SVN о том, что происходит с реинтеграционным слиянием, как: "И на самом деле , он делает это, сравнивая последнее дерево стволов с последним деревом ветвей: результирующая разница — это именно изменения вашей ветки!»

Начиная с trunc + changes from branch = trunc + (branch - trunk) = branch, я делаю вывод, что записанное состояние после реинтеграционного слияния всегда точно такое же, как записанное состояние в конце ветки.

Теперь рассмотрим эту историю:

trunk   A---B---D---F---H---I
             \        \   /
branch        C---E-----G-----X

Исходя из приведенных выше рассуждений, я бы предположил, что изменения из коммита H просто теряются, если I является реинтеграционным слиянием. Это правильно, или я что-то пропустил?


person cmaster - reinstate monica    schedule 22.07.2015    source источник


Ответы (1)


Subversion знает, что последней версией синхронизации является F, поэтому она вычисляет разницу между trunk@F и branch@G, а затем применяет ее к рабочей копии.

Если целевая рабочая копия проверила ревизию F, то реинтеграция пройдет гладко (без конфликтов), и после этого вы обновите wc до H (возможны конфликты) и сможете зафиксировать.

Если целевая рабочая копия извлекла ревизию H, то повторное слияние будет выполнено поверх H (в этом случае возможны конфликты при слиянии).

В любом случае ничего не потеряется.

person Sergey Azarkevich    schedule 22.07.2015