Три варианта:
Обратное объединение: (самый быстрый, сохраняет неверные ревизии, добавляет новую ревизию)
svn merge $(REPO)@$(GOODREV) $(WC)
Дамп SVN: (полностью удаляет неверные ревизии)
svnadmin dump $(REPO) -r 1:$(GOODREV) > dumpfile
svnadmin load $(NEWREPO) < dumpfile
# Now delete $(REPO), and use $(NEWREPO)
Редактирование вручную: (удаляет неверные ревизии, небезопасно, в крайнем случае)
Единственная причина, по которой вам это может понадобиться, - это если по какой-то причине у вас есть доступ к репозиторию на уровне файлов, но нет доступа к оболочке.Обратите внимание, что это было проверено только на SVN 1.6 и 1.7.
- Обновите вашу рабочую копию до
$(GOODREV)
(Если оставить ее на HEAD
, она будет непригодна после того, как мы закончим.) - Примите любые меры для защиты репо от внешнего доступа.Если он подключен к веб-серверу, отключите его сейчас.Доступ третьих сторон к репо во время этого процесса может повредить его.
- Сделайте резервную копию вашего репо.(Никогда не болит, на случай, если что-то пойдет не так.)
- Измените число в
db/current
на $(GOODREV)
.Не изменяйте конец строки LF
. - Удалите все пронумерованные файлы (не папки) в
db/revs/*/*
и db/revprops/*/*
, которые> $(GOODREV)
- Удалить
db/rep-cache.db
- Обновите вашу рабочую копию до
HEAD
, которая теперь должна быть равна $(GOODREV)
.
Обратите внимание, что если вы используете TortoiseSVN, вы также должны выполнить следующие шаги:
- Удалить все файлы в
%APPDATA%\TortoiseSVN\logcache\*
- Убить все экземпляры
TSVNCache.exe
через диспетчер задач.(Обычно он есть, но может быть 2 на WinVista + из-за безопасности UAC, которая предотвращает взаимодействие приложений с повышенными правами с TSVNCache.exe
без прав. При первом открытии диалогового окна Save As...
с повышенными правамиприложения, с повышенными правами TSVNCache.exe
появится.)
Это исправит странное отображение журнала, вызванное конфликтом кеша TortoiseSVN с новым состоянием репо.