"Наивный" svn сливается из ветки в туловище?
Я использую TortoiseSVN для моего проекта на С++ и пытаюсь "реинтегрировать ветвь" обратно в туловище.
Мой случай достаточно прост, так что для каждого файла, который был изменен в ветки, я хотел бы, чтобы он полностью перезаписывал соответствующий файл в trunk. К сожалению, TortoiseSVN умнее меня, поэтому он объединяет каждую пару файлов, что приводит к некоторому непоследовательному коду. Например, некоторые строки кода, которые были удалены в ветке, восстанавливаются в объединенной версии.
Есть ли способ заставить TortoiseSVN использовать поведение наивного слияния для перезаписи всех измененных файлов?
Спасибо,
Dan
Ответы
Ответ 1
Здесь, как это сделать, просто используя SVN (не обманывая файловую систему):
- Проверьте версию сундука, из которой вы создали ветвь ( not ревизия HEAD).
- Закрепить его в репозитории (это отменяет все последующие изменения сундуков).
- Сделайте свою реинтеграцию-слияние (ваша рабочая копия соединительной линии теперь должна быть идентичной ветке).
- Зафиксируйте объединенную ствол, и все готово!
Ответ 2
- обновить до последней ветки
- скопировать все файлы где-нибудь на вашей рабочей станции.
- ветвь перехода в магистраль
- перезаписать с помощью обычного проводника Windows (только измененные файлы будут перезаписаны)
- совершить
Ответ 3
Небольшое улучшение ответа webwesen, так как я действительно не вижу простого способа:
- выполнить экспорт svn ветки в некоторый каталог
- скопировать все файлы из этого каталога в директорию trunk
- совершить
Ответ 4
Насколько мне известно, в svn это невозможно в настоящее время, поэтому TortoiseSVN не может вам помочь.
Чтобы немного упростить (хорошо, много), возьмите команду svn update
в качестве примера. Если в рабочей копии и в репозитории есть изменения, но нет реальных конфликтов, svn update
просто объединит изменения репозитория в вашу рабочую копию.
Я не думаю, что есть способ обойти это. Если у вас были реальные конфликты, вы можете использовать параметр командной строки --accept ACTION
, чтобы сохранить только локальные изменения (например). Но если вы хотите указать действие принятия для любого файла, измененного как в репозитории, так и в рабочей копии, вам, к сожалению, не хватает удачи.
Мне кажется, что просить разработчиков svn для опции командной строки для этого случая может быть идея, а не то, что она будет выпущена вовремя, чтобы помочь вам здесь.
Проблема разрешения конфликтов, о которой я говорил, предлагает отвратительно уродливый хак, который я не рекомендую. Используя ваши любимые инструменты, получите список файлов, которые были изменены в ветке. Теперь для каждого файла в этом списке измените его на соединительной линии, добавив необычный символ в каждую строку. Зафиксируйте изменения в соединительной линии. Объедините, чтобы обновить ветвь до реинтеграции, но используйте --accept
, чтобы предотвратить внесение в нее каких-либо ужасных файлов соединительных линий. Затем снова запустите, используя --accept
, чтобы перезаписать ужасные файлы соединительных линий.
Я должен добавить, что вы не можете сделать это с TortoiseSVN, по крайней мере, не очевидно, потому что он не поддерживает --accept
, по крайней мере, не то, что я мог найти.
Хорошо, я сказал, что это ужасно уродливо. Не пытайтесь это дома! (Я, конечно, не знаю.)
Ответ 5
Команда "svn merge" предназначена для этой цели и позволит вам объединиться за один шаг. Инструкции здесь.