Как обновить дамп SVN

Я использую reposurgon, который читает svn dump, созданный просто:

svnadmin dump /svnroot/my-repo > svn_dump

Однако мне нужно обновить этот файл, потому что мы по-прежнему фиксируем хранилище, и каждый раз воссоздание всего файла занимает довольно много времени (его почти 60 гигабайт).

Итак, мой вопрос:

Есть ли способ добавить этот файл каждый раз, чтобы избежать полного повторного создания дампа?

В идеале это было бы возможно без необходимости вручную записывать диапазоны, сбрасываемые каждый раз


Обновить

Мне удалось сделать это с помощью инкрементных дампов, но первые 4 строки каждого файла после первого нужно удалить.

svnadmin dump -r0 /svnroot/my-repo --incremental                   > svn_dump
svnadmin dump -r1 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump
svnadmin dump -r2 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump
svnadmin dump -r3 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump
svnadmin dump -r4 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump

# is the same as:
svnadmin dump -r0:4 /svnroot/my-repo                               > svn_dump

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

2 ответа

В Apache Subversion 1.8 добавлена ​​поддержка добавочного svnadmin hotcopy резервные копии. До версии 1.8, svnadmin hotcopy смог создать только полную резервную копию, отказавшись копировать поверх существующего хранилища с горячей копией.

Основное преимущество использования svnadmin hotcopy вместо svnadmin dump / load его производительность ограничена только скоростью дискового ввода-вывода.

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

Во всяком случае, есть возможность incremental свалка. Из руководства SVN:

Два полезных параметра изменяют поведение генератора файла дампа. Первый - это параметр --incremental, который просто заставляет первую ревизию в потоке дампа содержать только файлы и каталоги, измененные в этой ревизии, вместо того, чтобы быть представленными как добавление нового дерева, и точно так же, как каждая другая ревизия в файле дампа представлена. Это полезно для создания сравнительно небольшого файла дампа, который будет загружен в другой репозиторий, в котором уже есть файлы и каталоги, существующие в исходном репозитории.

Второй полезный параметр - --deltas. Эта опция заставляет svnadmin dump вместо полнотекстовых представлений содержимого файлов и списков свойств генерировать только дельты этих элементов относительно их предыдущих версий. Это значительно уменьшает (в некоторых случаях) размер файла дампа, который создает дамп svnadmin. Однако использование этой опции имеет недостатки: файлы с разделенными дампами создаются с большей интенсивностью использования ЦП, не могут обрабатываться svndumpfilter и, как правило, не сжимают так же, как их неделитированные аналоги, при использовании сторонних инструментов, таких как gzip и bzip2.

Вы можете иметь скрипт, который использует эту функциональность, как:

$ svnadmin dump /var/svn/repos -r 21 --incremental > incr.dump
* Dumped revision 21.

Вы также можете использовать другую полезную вещь - deltas! Например, вы можете иметь еженедельник full резервное копирование и ежедневное - incremental а также deltas резервное копирование.

Однако, если вы храните большие объемы двоичных данных, имейте в виду, что deltas будет очень неэффективным. В этом виноват способ, которым svn работает изнутри - он просто не предназначен для хранения бинарных файлов.

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

Другие вопросы по тегам