2008-09-24 5 views
30

Предположим, что у меня есть набор коммитов в папке хранилища ...Отмена конкретные изменения в 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»

ответ

31

Чтобы отменить ПЕРЕСМОТРЫ 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) 

Также см описание в Undoing changes.

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

-2

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

svn copy -r 117 source destination 

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

EDIT: Это не отменяет ревизии в ветке/багажнике. Вместо этого используйте svn merge.

+1

Я тоже задавался вопросом об этом ... но разве успех этого не сильно зависит от того, были ли изменены те же файлы в 117, 118 и 119? Разве не было бы риска, что вы возьмете какой-нибудь артефакт из 118 чеков? – 2008-09-24 10:33:32

8

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

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

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

+1

На Mac клиент SVN Cornerstone делает это лучше всего. Я попробовал Версии, но он не может конкурировать с Cornerstone за такую ​​работу. – 2011-12-05 09:37:24