Предположим, что конфигурация SVN состоит из одного репо с вложенными папками проекта, примерно так:
\
- trunk
- - projectA
- - - trunk
- - - - ...
- - - branches
- - - - ...
- - projectB
- - - trunk
- - - - ...
- - - branches
- - - - ...
- ...
Все репо занимает на диске около 40 ГБ, по последним подсчетам 17605 коммитов. Теперь мне нужно извлечь один проект из репо для настройки на отдельном сервере SVN, что, как я понимаю, возможно только при использовании svnadmin dump
во всем репозитории, а затем с помощью svndumpfilter
чтобы выделить нужный мне проект. Я полностью ожидаю, что это займет очень много времени, чтобы закончить начальный дамп. Есть ли хорошая формула для точного расчета, сколько времени это займет и сколько места на диске потребуется для окончательного файла дампа? Кроме того, я слышал, что операция дампа использует 100% ЦП во время выполнения. Это правда?
В качестве альтернативы, есть ли лучший способ сделать это, учитывая размер репо? (За исключением простого экспорта и потери истории изменений.)
Есть ли хорошая формула для точного расчета, сколько времени это займет и сколько места на диске потребуется для окончательного файла дампа?
Чтобы избежать дискового ввода-вывода, вы можете перенаправить svndumpfilter
результат к netcat
.
На старом сервере SVN:
svnadmin dump /path/to/your/repo/ | svndumpfilter --drop-empty-revs --renumber-revs include single_project | nc -l 2302
и на новом сервере SVN:
svnadmin create single_project
nc IP_address 2302 | svnadmin load single_project
Я тестировал свое репо (4 ГБ, ~ 12000 ревизий), это занимает ~ 12 минут.
PS: Вы также можете использовать gzip
для сжатия данных и ionice
чтобы запустить это с низким приоритетом.
Это было бы очень здорово без --deltas
вариант, который вы не можете использовать, когда собираетесь его фильтровать. Разумеется, необходимое время и пространство будут зависеть от производительности вашего сервера и содержимого репо.
Если вам нужно выполнить пробный прогон, чтобы увидеть использование пространства, просто отправьте его по адресу /dev/null
- и, как упоминалось в @Zoredache, установите удобство процесса по мере необходимости.
Пара рекомендаций:
svnadmin dump -r 1:1000
),