Что произойдет, если между последним слиянием и слиянием реинтеграции в 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
это слияние реинтеграции. Это правильно, или я что-то пропустил?
1 ответ
Subversion знает, что последняя версия синхронизации F
так что посчитайте разницу между trunk@F
а также branch@G
и затем примените это к рабочей копии.
Если целевая рабочая копия проверена ревизией F
, затем реинтеграция пройдет гладко (без конфликтов) и после этого вы обновите wc до H
(возможные конфликты) и быть в состоянии совершить.
Если целевая рабочая копия проверена ревизией H
, тогда слияние будет произведено поверх H
(в этом случае возможны конфликты при слиянии)
В любом случае ничего не будет потеряно.