Как экспортировать (а затем импортировать) репозиторий 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 репозиторий на другой сервер.
Ответ 11
Вы можете найти некоторую помощь по переносу репозиториев SVN в Глава 5. Администрирование хранилища, Перенос репозитория.
Этот подход требует доступа к svnadmin.