Откат или возврат всего хранилища SVN в старую ревизию - PullRequest
74 голосов
/ 31 декабря 2008

Я испортил свой SVN-репозиторий, и теперь мне нужно вернуть весь репозиторий с 28-й до 24-й, и я не хочу иметь дело с разницей или конфликтами Есть ли быстрый и простой способ сделать это? У меня была возможность вернуть отдельные файлы обратно до выполнения команды merge, но в этом случае он хочет добавить все файлы обратно в хранилище из ревизии 28, когда все, что я действительно хочу сделать, это удалить их.

Я использую командную строку в окне linux (bash).

Спасибо

EDIT

Спасибо за помощь! Я исправил это:

svnadmin create /svnroot/<repo>.fixed
svnadmin dump -r 1:24 /svnroot/<repo> --incremental > dump.svn
svnadmin load /svnroot/<repo>.fixed < dump.svn

Затем поместите старое хранилище в резервное хранилище и переместите хранилище в фиксированное хранилище.

Еще раз спасибо!

Ответы [ 14 ]

26 голосов
/ 31 декабря 2008

Проверьте svnadmin dump / load. Он создает текстовый файл с каждой версией ваших файлов. Может быть возможно удалить все выше / ниже определенной точки и повторно импортировать это.

См., Например, Перенос данных репозитория в других местах

25 голосов
/ 31 декабря 2008

«Обратное» слияние может быть тем, что вам нужно. См. «Отмена изменений» раздел svn book.

например. svn merge -r 28:24 [путь к svn]

14 голосов
/ 27 октября 2009

Если у вас есть доступ к серверу SVN, вы можете просто отредактировать path/db/current, поместить туда старый номер ревизии, к которому вы хотите вернуться (здесь: 24), и удалить ненужные файлы ревизий (т.е. 27, 28) от path/db/revs/0/. По крайней мере, сегодня у меня это сработало после того, как я случайно удалил каталог в хранилище.

14 голосов
/ 31 декабря 2008

Если вам действительно нужно стереть «доказательства» того, что файлы когда-либо существовали, вам нужно выполнить действия svndump / svnload, описанные выше.

В «нормальной» ситуации, когда вы допустили ошибку, вам нужно использовать обратное слияние. Это гарантирует, что отмена изменений после r24 также может быть отменена, изменена и т. Д.

Команда ниже должна работать, чтобы отменить ваши изменения (вам необходимо зафиксировать результат слияния, чтобы отразить слияние в хранилище)

svn merge -r 28:24
6 голосов
/ 30 августа 2010

Если вы не пользуетесь правами администратора, вы не можете стереть какие-либо старые ревизии, НО вы все равно можете их очень хорошо скрыть с помощью одной удивительно простой команды «svn copy» (nickf и JesperE уже упоминали об этом, но довольно загадочно) 1001 *

протокол удаления svn: // svnserver / some / resource
протокол копирования SVN: // svnserver / some / resource @ 24 протокол: // svnserver / some / resource

И все, ревизии с 25 по 28 полностью исчезли из журнала svn. Это совсем не хак, это безопасная и (едва ...) документированная функция.

Если "ресурс" - это каталог, вы должны удалить его с последнего URL:

протокол копирования svn: // svnserver / some / directory @ 24 протокол: // svnserver / some /

(иначе вы бы скопировали его внутрь себя)

5 голосов
/ 20 февраля 2013

Для тех, кто использует TortoiseSVN, решение простое:

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

Этот метод сохраняет историю версий (т.е. все ревизии, которые вы вернули).

3 голосов
/ 31 декабря 2008

Вы можете сделать новую проверку конкретной ревизии. http://svnbook.red -bean.com / о / 1,1 / re04.html

svn co path/to/my/repo -r 24
2 голосов
/ 31 декабря 2008

Если структура папок вашего приложения не изменилась, извлеките старую ревизию и замените папки .svn из последней ревизии на извлеченную старую ревизию. Теперь вы можете зафиксировать «старую» версию.

2 голосов
/ 31 декабря 2008

Если вы действительно хотите полностью удалить файлы из хранилища, вам нужно выполнить svndump в файл, отфильтровать не нужные вам обороты и / или пути к файлам, создать новое хранилище и загрузить svnload отфильтрованного дампа. в новый репозиторий. Вы должны внимательно прочитать раздел книги SVN по обслуживанию репозитория , прежде чем делать что-либо из этого, и убедиться, что вы не удалите существующее хранилище, пока не убедитесь, что в новом есть то, что вам нужно. хочу.

1 голос
/ 02 февраля 2012

Не могли бы вы svn del самые верхние каталоги, затем svn copy их:

svn copy svnurl@version svnurl 
...