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 ответа

Решение

Ну, очевидно, вы можете создать резервную копию на сервере, а затем заархивировать и загрузить. Или вы можете просто не скачать всю историю.

Но какой смысл в этом вопросе? Это немного академично, так как ваша проблема решена.

У меня такая же проблема в моей коллекции репозиториев с сотнями тысяч ревизий. Вот как я могу обойти это:

  1. Создайте пустой репозиторий на зеркале.
  2. Создайте gziped файл дампа моего репозитория. (моя система резервного копирования уже делает это) (примечание: этот шаг занял всю ночь, чтобы отправить мой гигантский репозиторий через континент)
  3. scp (или ваша любимая техника удаленного копирования файлов), дамп файла на зеркальный сервер.
  4. Загрузите репозиторий, указав обязательно --force-uuid,
  5. Установите 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!

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