Содержание

Перенос репозитория на другой сервер

lonebuddha 2023/05/09 16:00

В этой статье представлен алгоритм переноса SVN репозитория с одного сервера на другой.

Перенос с использованием SSH

При наличии SSH доступа к обоим репозиториям последовательность действий такова:

  1. Авторизуемся по SSH на старом сервере
  2. Делаем dump старого репозитория
  3. Переносим repository.dumpfile на новый сервер
  4. Создаем новый репозиторий
  5. Загружаем dump в новый репозиторий
  6. Не забываем поменять адрес на клиенте

Создаем dump репозитория

svnadmin dump [repositoryPath] > dumpfile

Создаем новый репозиторий

cd [path-to-new-repository-parent-directory]
svnadmin create [new_repo]

Загружаем dump в репозиторий

svnadmin load [new_repo] < dumpfile

Меняем адрес на клиенте

svn switch --relocate [old_url] [new_url] 

Перенос без возможности применения SSH

Иногда встает задача переноса SVN репозитория с сервера на котором у вас нет ssh доступа. Возникнуть такая задача может у пользователей oDesk, Google Code, SourceForge и других площадок SVN доступ по ssh к которым невозможен. В таком случае можно воспользоваться svnsync. Программой позволяющей синхронизировать два репозитория. Последовательность действий:

  1. Создаем временный репозиторий
  2. Во временном репозитории создаем hook
  3. Синхронизируем врнменный репозиторий с удаленным при помощи svnsync
  4. Делаем dunp временного репозитория
  5. Создаем новый репозиторий
  6. Загружаем dump в новый репозиторий
  7. Не забываем поменять адрес на клиенте

Создаем внутри директории временного репозитория hook - пустой исполняемый файл

echo '#!/bin/sh' > [temp_repo]/hooks/pre-revprop-change
chmod +x [temp_repo]/hooks/pre-revprop-change

Синхронизируем удаленный репозиторий с временным

svnsync init file://[full_path_to_temp_repo]/[temp_repo] [old_url]
svnsync sync file://[full_path_to_repo]/[temp_repo]

Перенос одной командой

svnadmin dump /home/svn/[old_repo]/ | gzip -c | ssh <user>@<server> "gunzip -c | svnadmin load [mew_repo]"

Эта команда создает dump [old_repo] репозитория на локальном компьютере, упаковывает dump gzip'ом, для большей скорости передачи по сети, на удаленном <server> компьютере распаковывает и загружает dump в [mew_repo] репозиторий. Репозиторий [mew_repo] перед этим должен быть создан.