Отмена определенных ревизий в Subversion - PullRequest
30 голосов
/ 24 сентября 2008

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

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»

Ответы [ 3 ]

32 голосов
/ 24 сентября 2008

Чтобы отменить редакции 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.

8 голосов
/ 27 сентября 2008

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

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

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

0 голосов
/ 24 сентября 2008

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

svn copy -r 117 source destination

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

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

...