Как экспортировать (а затем импортировать) репозиторий 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:
-
установить отсутствующие зависимости (библиотеки" 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
вы также можете использовать svnsync. Для этого требуется только доступ только для чтения в исходном репозитории
выдержка из моего блог-для-себя
Теперь вы можете импортировать файл дампа, например, если вы мигрируете между версиями машин / 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 dump
иsvnadmin load
команды, ehm, генерируют полный дамп, а затем загружают его в другой репозиторий на другом сервере. Вам нужно будетsvnadmin create
новый чистый репозиторий для загрузки дампа в него. Имейте в виду, что подход имеет дело только с историей репозитория и не перемещает скрипты и репозиторий hook файлы конфигурации! Кроме того, вы должны прочитать доступ файловой системы к исходному репозиторию, чтобы сбросить его.другой вариант-использовать
svnadmin hotcopy
. Команда в основном используется для резервного копирования, она создает полную копию репозитория, включая сценарии конфигурации и крючка. Затем вы можете переместить репозиторий hotcopied на другой сервер.
вы также можете использовать :
svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH
требуется полная резервная копия из репозитория, включая все крючки, файлы конфигурации и т. д.
Если у вас нет доступа к файлу в репозиторий, я предпочитаю rsvndump (удаленный дамп репозитория Subversion) для создания файла дампа.
Я нашел статью о том, как переместить репозитории svn из службы хостинга в другую, и как сделать локальные резервные копии:
-
определите, где вы будете хранить ваши репозитории:
mkdir ~/repo MYREPO=/home/me/someplace ## you should use full path here
- Теперь создайте пустой репозиторий svn с
svnadmin create $MYREPO
-
создайте файл крючка и сделайте его исполняемым:
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
справочник.
источник:
вы можете найти некоторую помощь по миграции репозиториев SVN в Глава 5. Администрирование репозитория, миграция репозитория.
этот подход требует доступа к svnadmin.