"Наивные" свн сливаются из ветки в ствол? - PullRequest
14 голосов
/ 08 февраля 2010

Я использую TortoiseSVN для своего проекта C ++ и пытаюсь «реинтегрировать ветку» обратно в ствол.

Мой случай достаточно прост, так что для каждого файла, который изменился в ветви, я бы хотел, чтобы он полностью перезаписал соответствующий файл в стволе. К сожалению, TortoiseSVN умнее меня, поэтому он объединяет каждую пару файлов, что приводит к некоторому противоречивому коду. Например, некоторые строки кода, которые были удалены в ветви, восстанавливаются в объединенной версии.

Есть ли способ заставить TortoiseSVN использовать наивное поведение слияния при перезаписи всех измененных файлов?

Спасибо, Dan

Ответы [ 5 ]

7 голосов
/ 09 февраля 2010

Вот как это сделать, просто используя SVN (без проблем в файловой системе):

  1. Проверьте ревизию магистрали, из которой вы создали ветку ( не ревизия HEAD).
  2. Зафиксируйте его в хранилище (это отменяет все последующие изменения транка).
  3. Выполните реинтеграцию-слияние (ваша рабочая копия ствола теперь должна быть идентична ветви.)
  4. Передайте объединенный ствол, и все готово!
0 голосов
/ 09 февраля 2010

Насколько мне известно, в настоящее время это невозможно в SVN, поэтому TortoiseSVN не может вам помочь.

Чтобы немного упростить (хорошо, много), возьмем команду svn update в качестве примера. Если в вашей рабочей копии, а также в хранилище есть изменения, но нет реальных конфликтов, svn update просто объединит изменения хранилища с вашей рабочей копией.

Я не думаю, что есть способ обойти это. Если у вас были реальные конфликты, вы можете использовать параметр командной строки --accept ACTION, чтобы сохранить только локальные изменения (например). Но если вы хотите указать действие принятия для любого файла, измененного как в хранилище, так и в рабочей копии, вам, к сожалению, не повезло.

Мне приходит в голову, что спросить у разработчиков SVN о параметре командной строки для этого случая может быть идея, а не то, что он будет выпущен вовремя, чтобы помочь вам здесь.

Проблема разрешения конфликтов, о которой я упоминал, предполагает ужасно безобразный взлом, который я не рекомендую. Используя ваши любимые инструменты, получите список файлов, которые изменились в ветке. Теперь для каждого файла в этом списке измените его в стволе, добавив необычный символ к каждой строке. Зафиксируйте изменения в багажнике. Объедините, чтобы обновить ветвь до реинтеграции, но используйте --accept, чтобы не допустить попадания в нее каких-либо ужасных файлов стволов. Затем повторите интеграцию, снова используя --accept, чтобы перезаписать ужасные файлы стволов.

Я должен добавить, что вы не можете сделать это с TortoiseSVN, по крайней мере, не очевидно, потому что он не поддерживает --accept, по крайней мере, я не смог найти.

Ну, я сказал , это было ужасно безобразно. Не пытайтесь сделать это дома! (Конечно, нет.)

0 голосов
/ 08 февраля 2010

Команда "svn merge" предназначена для этой цели и позволит вам объединиться за один шаг.Инструкция здесь .

0 голосов
/ 08 февраля 2010

Немного улучшилось до ответа webwesen , так как я не вижу простого способа:

  • сделать svn экспорт ветки в какой-нибудь директории
  • скопировать все файлы из этого каталога в каталог транка
  • 1010 * совершить *
0 голосов
/ 08 февраля 2010
  1. обновление до последней ветки
  2. скопировать все файлы куда-нибудь на рабочую станцию ​​
  3. переключение ветки на транк
  4. перезаписать с помощью обычного проводника Windows (будут перезаписаны только измененные файлы)
  5. 1010 * совершить *
...