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

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

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

7 ответов

Решение

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

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 как обычно!

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

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

Для меня (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
  

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

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

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

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

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

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

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

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

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

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

Если вы хотите полностью удалить ревизии из истории между другими ревизиями и не хотите, чтобы ревизии сдвигались при загрузке дампа, например:

      ------- Committed new rev 1 (loaded from original rev 2) >>>
...
------- Committed new rev 2 (loaded from original rev 3) >>>
...

Затем вы можете просто заменить все капли в дампе для каждой ревизии.<N>от:

      Revision-number: <N>
... <blob> ...

к:

      Revision-number: <N>

или

      Revision-number: <N>
Prop-content-length: 0
Content-length: 0

Но чтобы сделать его совместимым, например, с https://sourceforge.net/p/PROJECT/REPO/commit_browser UI (иначе он зависнет при загрузке):

      Revision-number: <N>
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
1970-01-01T00:00:00.000000Z
PROPS-END

При этом все эти ревизии останутся пустыми, а другие ревизии останутся на тех же местах после загрузки дампа.

Графический интерфейс TortoiseSVNshow logпокажет их как(none).

Другие вопросы по тегам