Хотите удалить ревизии из моего хранилища 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.