Независимо от того, как я сюда попал, я могу восстановить репозиторий SVN из резервной копии. К сожалению, резервная копия была слегка повреждена, и из более чем 19000 исправлений примерно 80 потеряны. Резервная копия была файлом bzip2, и я смог использовать bzip2recover для восстановления около 99% блоков. Это «хорошо известно», так как они успешно распаковываются.svn recovery - восстановление отдельных версий
Поэтому я смог создать список известных хороших коммитов и потерянных коммитов.
Исходный репозиторий был также поврежден, но многие из файлов сохранились. К сожалению, репозиторий в целом сломан.
Так что мне посчастливилось иметь файлы из исходных каталогов db/revs и db/revprops для этих отсутствующих ревизий. Скорее всего, повреждение резервного файла bz2 не выравнивается с повреждением файлов db/revs.
Я перестроил все до r13892, но я знаю, что r13893 поврежден, поэтому у меня нет дампа для r13893. У меня есть файлы db/revs/13893 и db/revprops/13893 из исходного репозитория.
Я создал и восстановил репозиторий с помощью svn-1.4, но я обновил его до svn-1.6, чтобы использовать команду selective svnadmin verify (по одному или целому ряду коммитов).
Я подумал, что, возможно, я мог бы занести эти два файла в новый репозиторий, обновить db/current [1], а затем продолжить. Однако, когда я пытаюсь проверить, я получаю эту ошибку:
$ svnadmin verify new-svn
* Verified revision 1.
...
* Verified revision 13889.
* Verified revision 13890.
* Verified revision 13891.
* Verified revision 13892.
svnadmin: Can't read file 'svn/db/revs/13214': End of file found
Так что это явно не сработало. Не знаю, что здесь 13214.
Я отказался от возврата в svn-1.4.6 на всякий случай с чем-то необычным с 1.6. К сожалению, я получаю тот же результат - пересмотр 13893 не проверки:
...
* Verified revision 13891.
* Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214':
End of file found
Так вот что я знаю:
- Я знаю, что изменения 1 к 13892 являются 100% правильно (если не по какой-то крайне маловероятно шанс блок bz2 неправильно распакован, но передал контрольную сумму).
- Я не знаю, являются ли файлы r13893 из оригинального репозитория SVN в порядке - они могут быть повреждены, но количество коррупции было настолько маленьким, что маловероятно (но возможно).
Есть ли у кого-нибудь идеи, как я мог бы заполнить это отверстие? Обратите внимание, что у меня есть 100% -ый уверенный в себе r13894, поэтому, если я смогу подключить r13893, я могу продолжить работу с остальной частью восстановления.
[1] Я обновил дб/тока с помощью этого сценария: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py
Я испытал это на некоторых других репозиториев SVN (! После отключения записи в дБ/ток), чтобы убедиться, что она производила то же значение как это уже есть. Оно делает.
Да, в верхней части r13893 он говорит: DELTA 13214 0 12567271 Так что это треугольник на вершине 13214, который объясняет, где что приходит из. Одна вещь, которую я замечаю, что мой восстановленная двоичная совершает (в дБ/оборотах) начать с этого: СВН^A^@^@<86>^@ Но мои оригинальные r13893 фиксации выглядит так: СВН^@^@<86> ^@ Обратите внимание на первый байт после того, как «SVN» есть^@ (00) в старой фиксации, но^A (01) в новых коммитах. Это номер версии xdelta? Возможно, мне нужно перестроить 1 до 13892 с версией subversion, которая использует тот же формат xdelta? –
meowsqueak
Я не знаю о^@ vs^A. Но при загрузке дампа он должен рассказать вам, что такое исходный номер rev, и каков был новый номер rev. Соответствуют ли эти два номера? – retracile
Да, эти числа соответствуют. Я решил эту проблему на самом деле - это было потому, что я создал новое репо с 1.4, но старые файлы были созданы с 1.3, поэтому формат xdelta был другим. Я снова начал с svn-1.3, и эта проблема теперь решена. К сожалению, svnadmin segfaults позже, так что все не очень хорошо ... – meowsqueak