Subversion: есть ли что-нибудь быстрее, чем "svnsync"? - PullRequest
4 голосов
/ 08 февраля 2010

Так что мой репозиторий Subversion хранится в каком-то облаке (например, code.google.com), но по разным причинам мне нужно сделать свой код закрытым.

Я решил, что мне нужно загрузить весь репозиторий и перенести на свой собственный сервер SVN.

Итак, я начал использовать:

svnsync init DEST SRC
svnsync sync DEST

И для каждой ревизии репо требовалось около 0,5 секунды!

К счастью, в моем репо было всего около 200 ревизий ... так что подождите пару минут. Но как насчет зрелых проектов, которые имеют 200 000 или 2 000 000 ревизий!

... 2e6 * 0,5 / 60/60/24 ~ около 11 дней!


Есть ли что-нибудь быстрее, чем "svnsync", чтобы загрузить репо из облака?

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

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

  1. Создать пустой репозиторий на зеркале.
  2. Создайте gziped файл дампа моего репозитория. (моя система резервного копирования уже делает это) (примечание: этот шаг занял всю ночь, чтобы отправить мой гигантский репозиторий через континент)
  3. scp (или ваша любимая техника удаленного копирования файлов), файл дампа на зеркальный сервер.
  4. Загрузите репозиторий, указав --force-uuid.
  5. Настройка revprops для ревизии 0. Я просто взял нормально настроенный пустой репозиторий и посмотрел его ревизию 0.

Теперь вы готовы запустить svnsync на вашем главном сервере. Это будет продолжаться с того места, где остановился ваш дамп.

1 голос
/ 08 февраля 2010

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

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

0 голосов
/ 17 ноября 2012

В случае 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 или что-то подобное, чтобы они не использовались зеркалом - особенно если у вас есть перехват после фиксации исходного репо, который вызывает svnsync sync!

...