Хотите удалить ревизии из моего хранилища SVN


33

Последние исправления в моем репозитории были повреждены и дестабилизировали мое приложение. Я хочу вернуться к более ранней версии.

Но я не хочу просто использовать «вернуть» в моей рабочей копии; Я на самом деле хочу удалить свою ревизию головы и несколько ревизий ранее в моем репо, тем самым «вернув» мой репо к более ранней ревизии, которая станет головной ревизией. Кто-нибудь знает, как я это сделаю?


1
Вы не можете действительно удалить старые ревизии, все, что вы можете сделать, это отменить изменения и зафиксировать это, как упомянул Феликс. Интересно, что Git (как и другие решения по управлению версиями) действительно позволяет вам действительно удалять ревизии ..
davr

3
Да, вы можете, вам просто нужен доступ к репозиторию SVN с помощью svnadmin. Смотрите мой ответ ниже.
Мартин

Давр технически прав. То, что вы описываете, - это сброс всех ревизий, кроме плохих, а затем сброс их поверх старого репо. На мой взгляд, это не то же самое, что «удаление» ревизии.
Sirex

Ответы:


12

Может быть, эта ссылка поможет вам:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Quote:

  1. Перейдите в верхний каталог в вашей рабочей копии (если вы хотите откатить всю рабочую копию).

  2. запустить, svn revertчтобы вернуть файлы вашей рабочей копии в состояние, в котором они находились, когда вы в последний раз фиксировали / извлекали.

  3. запустить, svn status -vчтобы увидеть, какой номер ревизии теперь соответствует вашей рабочей копии (это самый большой номер ревизии в списке, который svn status -vпроизводит).

  4. run svn merge -rXX:YYгде XX- номер, полученный на предыдущем шаге, и YYномер ревизии, к которой вы хотите вернуться.

  5. Выполнено! Возможное исключение - это то, что файлы в вашей рабочей копии, которых не YYбыло на момент первоначальной ревизии , все равно будут там, потому что по умолчанию svn не удаляет вещи. Если вы хотите избавиться от них, запустите svn del [filename]на каждом из них.

  6. Отлично сработано! Теперь поиграйте с вашей рабочей копией, как будто все эти промежуточные правки никогда не происходили. И когда вы будете готовы совершить ваши усилия, просто используйте SVN commit как обычно!


1
В ОС Windows, вариант № 4 запустите svn merge -rXX:YY .Запомнить, чтобы поставить точку в конце строки для ссылки на текущий каталог. А в TortoiseSVN есть возможность отменить слияние.
Шанта Кумара

3
Это на самом деле не возвращает к «более ранней ревизии, которая станет основной ревизией». Это не делает старую ревизию ГОЛОВНОЙ. Скорее, это создает новую ГОЛОВУ. Смотрите ответ Мартина.
Мэттью Флашен

Я изменил ответ, чтобы включить замечание Шанты о конце периода. То же самое относится и к * nix.
Майк Корменди

72

Это сработало для меня. Учитывая, что у вас есть версия 1234 в качестве HEAD, и вы хотите отменить последние три коммита:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Вы единственный, кто понял вопрос и дал конкретный ответ.
Мэттью Флашен

6
Это технически правильный ответ. Следует отметить, однако, что это, помимо того, что это может быть довольно сложно сделать, также сделает недействительными все извлеченные копии - поэтому вам нужно будет предупредить любого, кто также использует репо.
слеске

1
Быстро и легко и точно, и фактически то, что просил плакат.
unc0nnected

7
Если вы также скопируете UUID хранилища в новое хранилище (см. «Svnadmin setuuid», копирование из идентификатора UUID в «svn info» старого хранилища), только извлечения, обновленные до ревизий, которые вы вырезали, будут быть признанным недействительным
Брайан Петти

1
В новых репозиториях вам может потребоваться исправить права доступа к файлам или скопировать файлы в каталогах hooks / conf
AdamS

5

Я знаю, что это старый вопрос, однако я только что нашел, как это сделать с Windows / TortoiseSVN.

Как следует из комментария, вы не можете «удалить» ревизию, но вы можете сделать более актуальную ревизию, совпадающую с ревизией, к которой вы хотите вернуться.

  1. Извлеките заголовок хранилища для каталога, из которого вы хотите отменить ревизию.
  2. Загрузите представление «Показать журнал» в TortoiseSVN для каталога самого высокого уровня, который вы хотите восстановить (например, «Магистраль»).
  3. Щелкните правой кнопкой мыши ревизию, которую вы хотите удалить ПРИМЕЧАНИЕ. Это ревизия, которую вы хотите удалить, а не та, к которой вы хотите вернуться.
  4. Выберите «Вернуть изменения из этой ревизии».
  5. Нажмите «Да» в командной строке.
  6. Обновите оформление заказа как обычно, но на «ГОЛОВУ».
  7. Зафиксируйте это обратно.

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

Кроме того, вам нужно убедиться, что все знают, что это была за ревизия, и, возможно, обновить описание.


чем это отличается от обычной процедуры «возврата»?
Томер W

Функция Revert просто меняет вашу рабочую копию на ту, которая находится в репозитории ... именно так, чтобы HEAD отчета отражал состояние любого предыдущего коммита.
Мартин

1
Спасибо за это - делать это с помощью черепахи SVN было как раз то, что мне было нужно, чтобы отменить ошибочный коммит :)
Доктор Эндрю Бернетт-Томпсон

В окне журнала также есть пункт контекстного меню « Вернуться к этой редакции ».
Уве Кейм

4

Вы можете использовать dump / load для этой цели.

Вы также можете использовать svnsync для создания резервной копии какой-либо ревизии.

Если у вас большой репозиторий, это займет время.


3

Для меня (VisualSVN, 30-HEAD) работает это:

  del C: \ Repositories \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  


Как это лучше, чем другие ответы?
Toto

Это намного быстрее.
Антон Голихофф

0

Перейдите в терминал и перейдите в репозиторий svn: теперь введите

svn update -r "номер ревизии, которую вы хотите вернуть"


2
Добро пожаловать в Супер пользователя! Пожалуйста, внимательно прочитайте вопрос. Ваш ответ не отвечает на оригинальный вопрос. ОП говорит: «Я не хочу просто использовать« revert »на своей рабочей копии»
DavidPostill
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.