TortoiseSVN: Использование Switch to Merge
Я работаю с другой командой в том же центральном хранилище.
У них есть ветвь (давайте назовем ее своим ответвлением), которую мне запрещено редактировать (можно просматривать, оформлять заказы, просто не изменять).
У меня есть своя ветка (myBranch), которая началась как копия их ветки. После проверки и работы над "рабочей копией" я отправляю ее обратно в myBranch, когда внесу в нее значительные изменения.
Цель: объединить любые изменения из их ветви в мою.
1-я попытка - сделать "слияние двух разных деревьев".
"Этот метод охватывает случай, когда вы хотите объединить различия двух разных ветвей в вашу рабочую копию".
Результат - Любое различие в коде было помечено как конфликт, даже когда код был изменен только мной с момента первоначального создания myBranch. Кроме того, с некоторой добавленной сложностью у меня возникли некоторые конфликты деревьев, потому что я удалил некоторые файлы из myBranch, которые все еще существуют в их ветке. Этот конфликт деревьев делает с тех пор для меня.
Вопрос 1: Нужно ли объединять / разрешать все конфликты деревьев вручную?
2 -я попытка - используйте "switch", чтобы объединить их ветку с myBranch. Вернитесь в мою ветку и зафиксируйте.
Как я понимаю, работая в одном и том же хранилище с (2) разными ветками, вы можете переключать ветку хранилища, с которой связана ваша рабочая копия. Когда это будет сделано, любые различия между вашей рабочей копией и новой веткой будут "объединены" с помощью "update".
От ЧерепахиСВН человек:
Переключатель -
Подобно тому, как "Обновление до ревизии" изменяет временное окно рабочей копии, чтобы посмотреть на другую точку истории, "Переключение" изменяет окно пространства рабочей копии так, чтобы оно указывало на другую часть хранилища. Это особенно полезно при работе на стволе и ветвях, где отличаются только несколько файлов. Вы можете переключиться между двумя рабочими копиями, и будут переданы только измененные файлы.
Обновить -
Эта команда Subversion записывает последние изменения из хранилища в вашу рабочую копию, объединяя любые изменения, сделанные другими, с локальными изменениями в рабочей копии.
Результат. Любые файлы, которые отличались друг от друга, были заменены в моей рабочей копии версией файла "их ответвление".
Вопрос 2 - Почему файлы заменены, а не объединены?
Вопрос 3 - Почему их файлы ветвей, которые существовали только в их ветвях, были помещены в myBranch, и не было конфликта дерева?
Пожалуйста, не стесняйтесь отвечать на любые вопросы, ответы на которые вы знаете, или на любые советы по достижению моей цели. Спасибо.
1 ответ
Сначала приведу анализ того, что вы пробовали:
1) Слияние двух разных деревьев
Как указано в https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html, он может работать в вашем случае, если:
- у вас есть рабочая копия, связанная с myBranch
- и вы выбираете слияние ИЗ myBranch с их веткой в окне TortoiseSVN (а не наоборот, как я полагаю, вы это сделали: оно объясняет конфликты, которые вы наблюдали).
Однако этот вид слияния полезен, когда нет функции отслеживания слияний, которую можно использовать, что, вероятно, не в вашем случае.
2) Переключить команду
Это не слияние, а ресинхронизация вашей локальной рабочей копии с другой веткой (в вашем случае). Поэтому, если у вас нет локальных изменений по сравнению с myBranch до переключения, у вас не будет никаких изменений по сравнению с их Branch после переключения. Это означает, что ваши локальные файлы будут заменены, как вы заметили. Это ответы на ваши вопросы 2 и 3.
Команда Switch не является слиянием, и ее использование в вашем случае может быть довольно опасным (вы можете, наконец, забыть, с какой веткой связана ваша локальная рабочая копия).
Во-вторых, я рекомендую использовать "Объединить ряд ревизий", который кажется вполне подходящим для вашего случая. Однако все еще возможно, что вы столкнетесь с конфликтами деревьев: вам придется решать их вручную, как и все другие конфликты. Это ответы на ваш вопрос 1.