Subversion: есть ли что-нибудь быстрее, чем "svnsync"?
Так что мой хранилище Subversion хранится в каком-то облаке (например, code.google.com), но по разным причинам мне нужно сделать свой код закрытым.
Я решил, что мне нужно загрузить весь репозиторий и перенести на свой собственный сервер SVN.
Итак, я начал использовать:
svnsync init DEST SRC
svnsync sync DEST
И это заняло около 0,5 секунд для каждой ревизии репо!
К счастью, в моем репо было около 200 ревизий... так что пару минут подождать. Но как насчет зрелых проектов, которые имеют 200 000 или 2 000 000 ревизий!
... 2е6 * 0,5 / 60 / 60 / 24 ~ около 11 дней!
Есть ли что-нибудь быстрее, чем "svnsync", чтобы загрузить репо из облака?
3 ответа
Ну, очевидно, вы можете создать резервную копию на сервере, а затем заархивировать и загрузить. Или вы можете просто не скачать всю историю.
Но какой смысл в этом вопросе? Это немного академично, так как ваша проблема решена.
У меня такая же проблема в моей коллекции репозиториев с сотнями тысяч ревизий. Вот как я могу обойти это:
- Создайте пустой репозиторий на зеркале.
- Создайте gziped файл дампа моего репозитория. (моя система резервного копирования уже делает это) (примечание: этот шаг занял всю ночь, чтобы отправить мой гигантский репозиторий через континент)
- scp (или ваша любимая техника удаленного копирования файлов), дамп файла на зеркальный сервер.
- Загрузите репозиторий, указав обязательно
--force-uuid
, - Установите revprops для ревизии 0. Я просто взял нормально настроенный пустой репозиторий и посмотрел его рев 0.
Теперь вы готовы запустить svnsync на своем главном сервере. Это будет продолжаться с того места, где остановился ваш дамп.
Да, есть. Репликация, выполняемая распределенной файловой системой VisualSVN (VDFS), как минимум в 10 раз быстрее, чем репликация черезsvnsync
. Более того, зеркальные репозитории VDFS доступны для записи.
Эта технология позволяет распределенным командам работать с репозиториями Subversion с такой же скоростью, как если бы все они находились в одной локальной сети. Используя технологию VDFS, главный репозиторий может быть реплицирован на несколько сайтов и мест, что приводит к ускорению операций чтения до 1000%. Например, рабочая копия размером 50 ГБ может быть получена всего за 10 минут. Та же задача, выполняемая при обычном подключении к Интернету, займет как минимум час.
В случае OP, где у вас нет консольного доступа к серверу SVN, svnsync
(что по сути svn checkout
с URL 1 в сочетании с svn commit
на URL 2) так же хорошо, как вы собираетесь получить.
Но если у вас есть доступ к серверу, есть более быстрые способы, чем svnsync
, Один хороший способ построить зеркало - это использовать svnadmin hotcopy
чтобы сделать начальную копию хранилища, затем используйте svnsync init --allow-non-empty
опция добавлена в Subversion 1.7, чтобы превратить его в зеркало. Это также дает вам резервную копию ваших хуков и т. Д., Что иначе не сделает svnsync.
Обратите внимание, что вы хотите переместить hooks
каталог для hooks-original
или что-то такое, чтобы они не использовались зеркалом - особенно если у вас есть хук post-commit для исходного репо, который вызывает svnsync sync
!