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

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

Как бы я это сделал?

11 ответов


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

если у вас есть бэкэнд БД Berkley, если вы не уверены в том, что ваш бэкэнд, или если вы меняете номера версий 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. Или, если вы не хотите хранить историю, вы можете использовать свою рабочую копию для импорта в новый репозиторий. Но, надеюсь, это не так.


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

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

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

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. установить 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
    
  3. дамп удаленного хранилища SVN в локальный файл

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

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

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

больше на svnbook


выдержка из моего блог-для-себя
Теперь вы можете импортировать файл дампа, например, если вы мигрируете между версиями машин / subversion. например, если я создал файл дампа из исходного репозитория и загрузил его в новый репозиторий, как показано ниже.

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

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

svnadmin dump

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

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


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

вот краткое описание ваших опций:


вы также можете использовать :

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

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

больше в SVN Book


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


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


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

  1. определите, где вы будете хранить ваши репозитории:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. Теперь создайте пустой репозиторий svn с svnadmin create $MYREPO
  3. создайте файл крючка и сделайте его исполняемым:

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

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

    svnsync sync file://$MYREPO
    

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

источник:


вы можете найти некоторую помощь по миграции репозиториев SVN в Глава 5. Администрирование репозитория, миграция репозитория.

этот подход требует доступа к svnadmin.