TortoiseSVN Tree Conflict: не удается выбрать удаленный файл
Здесь сценарий:
- User1, Branch1: добавляет "abc.def" ; фиксаций.
- User2, Branch2: добавляет "abc.def" (то же имя файла, но более подробно в файл); фиксаций.
Теперь User1 хочет объединить обновленную версию файла "abc.def" . Итак, используя TortoiseSVN 1.7.10, User1 запускается в рабочей копии Branch1, выбирает Merge...
→ Reintegrate a Branch
, затем выбирает Branch2 и выбирает Merge
. Как и ожидалось, результат "Дерево конфликтов", с этим текстом:
Последняя операция слияния попыталась добавить файл 'abc.def' из Branch2, но файл уже был добавлен локально. Как вы хотите разрешить этот конфликт?
Но единственным выбором является единственная кнопка с меткой Keep the local file
. Невозможно выбрать удаленный файл, который действительно нужен User1.
![введите описание изображения здесь]()
Что я делаю неправильно здесь и как его исправить? Более конкретно, как мне получить версию файла User2 в Branch1?
(Конечно, я уверен, что User1 может вручную удалить файл до слияния, но это уничтожает любую историю, которую UserI может пожелать сохранить. Кроме того, это просто неуклюжий рабочий процесс, особенно когда в этом затруднительном положении есть многочисленные файлы.)
К сожалению, этот сценарий даже не упоминается в документации TortoiseSVN о конфликтах дерева
ОБНОВЛЕНИЕ:
В дополнение к выбору "Reintegrate a Branch
" я также попробовал "Merge a Range of Revisions
" и "Merge two different trees
". В последнем случае я выбрал удаленную ветвь (Branch2) как "Старт", а локальную ветвь - как целевую (Branch1, выбирая Revision до добавления файла). Я получил тот же результат во всех случаях: Tree Конфликт без опции выбора версии файла User2.
ОБНОВЛЕНИЕ # 2:
В соответствии с документацией должен быть установлен флажок в диалоговом окне слияния с названием Merge non-interactive
", который, если он не установлен, предположительно открывает диалоговое окно" Диалог обратного вызова слиянием" во время слияния. Тем не менее, я не могу найти такой флажок в процессе слияния. Где это?
Ответы
Ответ 1
Мне удалось слить из одной ветки в другую в версии 1.9 TortoiseSVN со следующей процедурой.
Настройка
С тестовым репозиторием я сделал следующие шаги:
-
Создайте ветку, "сначала"
-
Создайте файл "doc.txt" с содержимым "FIRST" в новой ветке
![first doc]()
-
Добавить и перенести файл в новую ветку
-
Создайте ветку, "второй"
-
Создайте файл "doc.txt" с содержимым "SECOND" в этой ветке
![second doc]()
-
Добавить и перенести файл в новую ветку
Итак, моя структура выглядит так:
branches/
first/
doc.txt => "FIRST"
second/
doc.txt => "SECOND"
Слияние
В этом примере моя цель - получить содержимое second/doc.txt
в первую ветвь.
-
Щелкните правой кнопкой мыши папку ветвления first
и выберите TortoiseSVN > Merge...
-
Выберите "Слить два разных дерева"
![диалог слияния]()
-
Заполните поле "От" URL-адресом для /branches/first
и поле "Кому" с URL-адресом для /branches/second
.
(Это то, где я изначально сработал - я думал, что это будет обратное! Документы объясняют: "Это может звучать неправильно, но помните что соединительная линия является начальной точкой, к которой вы хотите добавить изменения ветки." )
-
Нажмите "Далее" и попробуйте тестовое слияние, если хотите. Он должен показать, что "doc.txt" заменен, без конфликтов деревьев. В этом примере параметры слияния по умолчанию были в порядке.
![параметры слияния]()
-
Сделайте слияние и проверьте содержимое first/doc.txt
- теперь он должен читать "ВТОРОЕ".
![merge results]()
-
Запустите обновление и затем скопируйте папку first
, чтобы сохранить слияние в репозитории!
![commit results]()
Полный журнал:
![журнал репозитория]()
Ответ 2
Реинтегрируйте ветку и объедините диапазон версий
Я думаю, что вы хотите, чтобы сначала объединить ряд изменений, а затем объединить ветку обратно в дерево.
Ответ 3
Появится диалог под названием
Диалог обратного вызова слияния конфликтов
![введите описание изображения здесь]()
Относительно этой проблемы:
Диалог обратного вызова слияния конфликтов должен появиться
- при слиянии нескольких версий с помощью "Объединить ряд изменений"
- при слиянии через "Реинтегрировать ветвь"
в настоящий момент диалоговое окно Callback Dial Merge Conflict появляется только в
первый случай.
Он будет включен в предстоящую версию 1.6.0.
Это позволяет вам выбрать изменение репозитория вместо вашего