Я пытаюсь восстановить удаленный репозиторий Subversion на свой локальный компьютер. У меня нет прямого доступа к серверу для запуска команд оболочки, но у меня есть полные разрешения svn на сам репозиторий.
Из-за какой-то проблемы, которую нам еще предстоит выявить, ни svnsync, ни svndump, ни что-либо еще, что я пробовал, не удается при одновременном запуске со всем хранилищем. В какой-то момент во время операции произойдет сбой с сообщением типа «время ожидания соединения истекло» или «невозможно получить доступ к блоку» или аналогичными сообщениями. Нам не удалось найти источник проблемы, это может быть проблема с программным обеспечением на сервере, поврежденный репозиторий или, возможно, просто ненадежное сетевое соединение. Независимо от того, в чем проблема, человек, контролирующий сервер, очень медленно помогает нам решить проблему, поэтому мы пытаемся обойти ее, если сможем.
Я смог делать дампы сервера партиями ревизий. Я выполнил серию команд, подобных этим, чтобы получить частичные дампы следующим образом:
svnrdump dump -r0:499 https://server/svn/respository > 0-499.dump
svnrdump dump -r500:999 https://server/svn/respository > 500-999.dump
svnrdump dump -r1000:1499 https://server/svn/respository > 1000-1499.dump
Это позволило мне решить проблемы с сервером. Когда время ожидания дампа истекло или возникли другие проблемы, я просто повторял эту часть, пока она не работала, или использовал меньший шаг. Теперь у меня есть несколько файлов дампа, которые вместе представляют весь репозиторий.
Мой вопрос: как я могу объединить эти отдельные дампы в один локальный репозиторий?
Я пытался сделать это с пустым локальным репозиторием:
svnadmin load repository < 0-499.dump
svnadmin load repository < 500-999.dump
Первая команда работает, а вторая не работает. Сообщение об ошибке предполагает, что он пытается добавить файл, который уже существует, и сдается. Я обнаружил, что могу сделать это вместо этого:
svn mkdir batch1
svnadmin load --parent-dir "batch1" repository < 0-499.dump
svn mkdir batch2
svnadmin load --parent-dir "batch2" repository < 500-999.dump
Это успешно загружает отдельные пакеты ревизий в отдельные каталоги в репозитории, но я не уверен, как/могу ли я затем объединить их в одну папку.
Я также знаю, что я мог бы использовать --incremental переключатель при создании дампов, но я не уверен, что это хорошая идея, поскольку я подозреваю, что в инкрементных данных могут быть некоторые повреждения (одна из причин, по которой я подозреваю, что это потому, что запуск svnsync
или git svn clone
в репозитории иногда приводит к ошибкам с несоответствием контрольной суммы)
Могу ли я каким-то образом объединить неинкрементные последовательные дампы, которые у меня есть, в единый новый репозиторий? Если нет, то какой другой метод я должен использовать для этого, учитывая, что svnsync
и svnrdump
никогда не срабатывали при одновременном запуске со всеми ревизиями?