Отмена определенных изменений в Subversion

Предположим, у меня есть набор коммитов в папке репозитория ...

123 (250 new files, 137 changed files, 14 deleted files)
122 (150 changed files)
121 (renamed folder)
120 (90 changed files)
119 (115 changed files, 14 deleted files, 12 added files)
118 (113 changed files)
117 (10 changed files)

Я хочу получить рабочую копию, которая включает все изменения, начиная с ревизии 117, но НЕ включает изменения для ревизий 118 и 120.

РЕДАКТИРОВАТЬ: Чтобы, возможно, прояснить проблему, я хочу отменить изменения, внесенные в 118 и 120, сохранив все остальные изменения. Папка содержит тысячи файлов в сотнях подпапок.

Как лучше всего этого добиться?

Ответ, благодаря Бруно и Берту, - это команда (в данном случае для удаления 120 после выполнения полного слияния)

svn merge -c -120 .

Обратите внимание, что номер ревизии должен быть указан с начальным минусом. «-120», а не «120»


person Ed Guiness    schedule 24.09.2008    source источник


Ответы (3)


Чтобы отменить редакции 118 и 120:

svn up -r HEAD       # get latest revision
svn merge -c -120 .  # undo revision 120
svn merge -c -118 .  # undo revision 118
svn commit           # after solving problems (if any)

Также см. Описание в Отмена изменений.

Обратите внимание на минус в аргументе -c -120. Переключатель -c (или --change) поддерживается начиная с Subversion 1.4, более старые версии могут использовать -r 120:119.

person Bruno De Fraine    schedule 24.09.2008

Есть более простой способ, если вы используете TortoiseSVN, клиент Windows для Subversion. Вы просто щелкаете, чтобы просмотреть журнал в своей обновленной рабочей копии, выбираете редакции, которые хотите отменить, щелкаете правой кнопкой мыши и выбираете «Отменить изменения из этих редакций».

Это безопасная операция, потому что изменения применяются только в вашем рабочем пространстве. Вам все равно нужно внести изменения в свой репозиторий.

Это одна из лучших функций TortoiseSVN. Я всегда был сторонником командной строки, но Tortoise передумал.

person neves    schedule 27.09.2008
comment
На Mac лучше всего с этим справляется клиент SVN Cornerstone. Я пробовал Versions, но он не может конкурировать с Cornerstone в подобной работе. - person William Macdonald; 05.12.2011
comment
+1 Очень полезно / просто для тех, кто использует TortoiseSVN. Спасибо за это! - person Mansoor Siddiqui; 10.10.2012

Я полагаю, вы могли бы создать ветку из ревизии 117, а затем объединить все, кроме 118 и 120.

svn copy -r 117 source destination

Затем проверьте эту ветку и оттуда сделайте svnmerge.py merge -r119,120-123

РЕДАКТИРОВАТЬ: Это не отменяет изменения в ветви / стволе. Вместо этого используйте svn merge.

person Christian Davén    schedule 24.09.2008
comment
Я тоже задавался вопросом ... но разве успех этого не будет сильно зависеть от того, были ли изменены те же файлы в 117, 118 и 119? Разве не было бы риска, что вы обнаружите какой-нибудь артефакт при проверке 118? - person ; 24.09.2008