Как экспортировать (а затем импортировать) репозиторий Subversion?

Я просто завернутый в проект, где я использовал коммерческий поставщик SVN для хранения исходного кода. Веб-хост, выбранный клиентом, включает в себя репозиторий как часть пакета хостинга, поэтому, когда проект завершен, я хотел бы переместить репозиторий на свой веб-хост и прекратить коммерческую учетную запись.

Как мне это сделать?

Ответ 1

Если вы хотите переместить репозиторий и сохранить историю, вам, вероятно, понадобится доступ к файловой системе на обоих хостах. Самое простое решение, если ваш сервер - FSFS (по умолчанию в последних версиях), заключается в том, чтобы сделать копию всей папки хранилища в файловой системе.

Если у вас есть бэкэнд Berkley DB, если вы не уверены в том, что у вас есть, или если вы меняете номера версий SVN, вы захотите использовать svnadmin для сброса старого хранилища и загрузки его в ваш новый репозиторий. Использование svnadmin dump даст вам одну резервную копию файла, которую вы можете скопировать в новую систему. Затем вы можете создать новый (пустой) репозиторий и использовать svnadmin load, который по существу воспроизводит все коммиты вместе со своими метаданными (автор, метка времени и т.д.).

Подробнее о процессе дампа/загрузки вы можете узнать здесь:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

Кроме того, если вы выполняете svnadmin load, убедитесь, что используете параметр --force-uuid, иначе люди будут иметь проблемы с переходом на новый репозиторий. Subversion использует UUID для идентификации внутреннего хранилища, и он не позволит вам переключать рабочую копию в другой репозиторий.

Если у вас нет доступа к файловой системе, там могут быть другие сторонние опции (или вы можете что-то написать), чтобы помочь вам выполнить миграцию: по существу вам нужно будет использовать журнал svn для повторной проверки каждой версии на новом репозиторий, а затем исправить метаданные впоследствии. Для этого вам понадобятся сценарии крюка pre-revprop-change и post-revprop-change, который предполагает доступ к файловой системе, поэтому YMMV. Или, если вы не хотите сохранять историю, вы можете использовать свою рабочую копию для импорта в новый репозиторий. Но, надеюсь, это не так.

Ответ 2

rsvndump отлично поработал у меня, перенаправляя репозиторий с svnrepository.com на сервер Ubuntu, который я контролирую.

Как установить и использовать rsvndump на Ubuntu:

  • Установите отсутствующие зависимости (библиотеки "APR" и Subversion)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  • Установить rsvndump

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
  • Удалите удаленный репозиторий SVN в локальный файл

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  • Создайте новый репозиторий и загрузите файл локального дампа

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

Ответ 3

Вы также можете использовать svnsync. Для этого требуется доступ только для чтения в исходном репозитории

больше в svnbook

Ответ 4

Отрывок из моего Blog-Note-to-yourself
Теперь вы можете импортировать файл дампа, например. если вы перемещаетесь между версиями машин/подрывников. например если я создал файл дампа из исходного репозитория и загрузил его в новый репозиторий, как показано ниже.

CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp

Ответ 5

Инструментом для этого будет

svnadmin dump

Но для этого вам нужно иметь доступ к файловой системе в репозиторий. И как только вы это сделаете (и предоставив репозиторий в формате FSFS), вы можете просто скопировать репозиторий в новое место (если это в формате BDB, настоятельно рекомендуется использовать дамп/нагрузку).

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

Ответ 6

Вы также можете использовать команду svnadmin hotcopy:

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

Требуется полная резервная копия из репозитория, включая все перехватчики, файлы конфигурации и т.д.

Подробнее в книге SVN

Ответ 7

Если у вас нет доступа к файлу в репозитории, я предпочитаю rsvndump (удаленный репозиторий удаленной Subversion), чтобы сделать файл дампа.

Ответ 8

Предполагая, что у вас есть необходимые привилегии для запуска svnadmin, вам нужно использовать dump и load.

Ответ 9

Я нашел статью о том, как переместить svn-репозитории из службы хостинга в другую и как сделать локальные резервные копии:

  • Определите, где вы будете хранить свои репозитории:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  • Теперь создайте пустой репозиторий svn с svnadmin create $MYREPO
  • Создайте файл hook и сделайте его выполнимым:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  • Теперь мы можем начать импорт репозитория с помощью svnsync, который инициализирует репозиторий-получатель для синхронизации из другого репозитория:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  • И последний штрих для переноса всех ожидающих пересмотра адресата из источника, с которым он был инициализирован:

    svnsync sync file://$MYREPO
    

Теперь у вас есть локальный репозиторий svn в каталоге ~/repo.

Источник:

Ответ 10

В принципе, есть много способов выполнить задачу. Тема подробно освещена в SVNBook | Миграция данных репозитория в другом месте, поэтому я предлагаю прочитать раздел книги.

Вот краткое описание ваших возможностей:

  • Это зависит от вашей среды, но есть большая вероятность, что вы можете просто скопировать репозиторий на новый сервер, и он будет работать. Вы должны пересмотреть сценарии крюка репозитория после копирования репо, чтобы убедиться, что они работают так, как вы ожидаете.

  • Вы можете использовать svnadmin dump и svnadmin load команды, ehm, создать полный дамп, а затем загрузить его в другой репозиторий на другом сервере. Вам нужно svnadmin create новый чистый репозиторий для загрузки дампа в него. Имейте в виду, что этот подход имеет дело только с историей репозитория, а не перемещает скрипты крюка и файлы конфигурации репозитория! Кроме того, вы должны иметь доступ к файловой системе в исходный репозиторий, чтобы сбрасывать ее.

  • Так как доступен инструмент Subversion 1.7, svnrdump. Вообще говоря, он имитирует функциональность svnadmin dump и svnadmin load, но работает удаленно. У вас нет необходимости иметь доступ к файловой системе чтения/записи в исходные и целевые репозитории, поскольку инструмент работает удаленно, как клиент Subversion, например. по протоколу HTTPS. Таким образом, вам необходимо иметь доступ на чтение к исходному репозиторию и читать/записывать на целевой.

  • Другой вариант - использовать команду svnadmin hotcopy. Команда в основном используется для целей резервного копирования, она создает полную копию репозитория, включая скрипты конфигурации и крюка. Вы можете переместить hotcopy репозиторий на другой сервер.