Как экспортировать (а затем импортировать) хранилище Subversion? - PullRequest
78 голосов
/ 08 сентября 2008

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

Как бы я поступил так?

Ответы [ 11 ]

63 голосов
/ 08 сентября 2008

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

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

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

http://svnbook.red -bean.com / о / 1,8 / svn.reposadmin.maint.html # svn.reposadmin.maint.migrate

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

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

33 голосов
/ 18 марта 2011

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
    
9 голосов
/ 15 сентября 2008

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

больше на svnbook

6 голосов
/ 08 сентября 2008

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

CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp
5 голосов
/ 07 февраля 2010

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

5 голосов
/ 08 сентября 2008

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

svnadmin dump

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

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

4 голосов
/ 05 декабря 2013

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

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

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

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

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

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

4 голосов
/ 08 сентября 2008

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

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

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

Больше на SVN Book

3 голосов
/ 06 сентября 2013

Я нашел статью о том, как перенести 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.

Источник:

3 голосов
/ 08 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...