33

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

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

6 ответов6

70

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

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

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

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

Цитата:

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

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

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

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

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

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

5

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

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

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

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

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

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
  
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .