"Наивный" 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" предназначена для этой цели и позволит вам объединиться за один шаг. Инструкции здесь.