Назад | Перейти на главную страницу

Восстановление репозиториев Subversion из резервной копии

Мне пришлось восстанавливать подрывной сервер из резервной копии, сделанной накануне вечером. После восстановления все работало нормально, кроме одного репозитория.

Рабочая копия была зафиксирована на сервере после последней резервной копии, поэтому в этой рабочей копии были более новые файлы, чем в восстановленном репозитории. Я попытался зафиксировать файлы с помощью tortoise, но SVN не распознал, что файлы в рабочей копии были новее, чем файлы в репозитории.

Я использую Subversion Server 1.6.5 на Windows 2003 Server и TortoiseSVN 1.6.8 64 бит на 64-битном клиенте Win7.

Спасибо, Джон

Это связано с тем, что SVN использует локальный «кеш» файлов рабочих копий, чтобы решить, что отличается от репозитория (поэтому ему не нужно связываться с репозиторием, чтобы получить файл, сравнить его, просто чтобы узнать, что вы поменял).

В этом случае это работает не так, как вы хотите, поскольку рабочая копия (и ее кеш) не синхронизированы с репо. Когда вы изменяете этот файл и фиксируете его, вы обнаружите, что SVN повторно синхронизируется (и, без сомнения, выдаст ошибку «что происходит»).

Итак, вам необходимо вручную повторно синхронизировать кэш рабочей копии. Во-первых, сделайте копию каталога рабочей копии без кеша, т.е. каталогов .svn. (найдите .svn, используя старую собачку Windows Search, и удалите все эти каталоги)

Затем обновите каталог, чтобы получить текущий статус репо, я думаю, SVN обновит кеш и объединит ваши локальные изменения в файлы в репо, так что вы вернетесь к нормальному состоянию - т.е. измененные файлы получат 'измененный ', а затем вы можете зафиксировать изменения. Я почти уверен, что именно это и произойдет, но я всегда параноидально отношусь к потере данных после восстановления, поэтому сначала вы сделаете копию. Если что-то пойдет не так, вы можете просто перезаписать файлы, полученные из репозитория, на свой старый WC, и он будет отображаться как измененный. совершить как обычно.

В Windows создайте два командных файла:

Первый

[dobackups.bat]

@echo off
echo - BORN 05 SVN Repository export batch file -

set Rep=C:\Repositories\
set BackUps=c:\backups
CD %Rep%

rem Don't need %Backup% because you're already changed to it.
for /f %%R in ('dir/b') do call :1 %%R
goto :eof

:1
echo Exporteren van %Rep%%1 naar %Backups%\%1.bak
"C:\Program Files\VisualSVN Server\bin\svnadmin" dump %Rep%%1 > %Backups%\%1.bak
echo Done!
echo .........................................
CALL WAIT 3

[WAIT.BAT]

@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

Еще раз прикоснитесь к новым файлам и повторите попытку.