Site icon Заметки разработчика

Перенос subversion репозитория на git (bitbucket)

перенос Subversion на Git

Ни для кого не секрет, что Subversion безнадежно устарел по сравнению с Git. Тем не менее многие по прежнему работают с svn. И основная причина для этого — нежелание тратить время на процесс миграции и ожидание возникновения проблем при выполнении перехода. Возможно данная статья поможет решиться на миграцию и сделает процесс переноса Subversion быстрее.

Рекомендую выполнять миграцию из консоли linux. Как выяснилось, сборки git для Windows весьма специфичны и могут не справиться с клонированием svn репозиториев. Я буду описывать процесс перехода на BitBucket под Centos 7.

Для начала нужно убедиться, что у вас установлен git 2.27 или более новая версия. Если на этом же сервере у вас установлен и BitBicket server, то можно не переживать — у вас уже установлена свежая версия

git --version
git version 2.27.0

Если версия старая, то клонируем репозиторий и строим git

cd ~/ && git clone https://github.com/git/git.git && cd git && make && make install

Устанавливаем пакет subversion-perl.

yum install subversion-perl

Иначе процесс клонирования svn будет завершен с ошибкой

Can't locate SVN/Core.pm

Для того чтобы данные после переноса Subversion репозитория на git выглядели аккуратно, нужно создать файл для сопоставления имени пользователя svn с соответствующим ему именем в git. Пример такого файла — authors.txt — приведен ниже:

peter = Петр Васильев <pvasiliev@gmail.com>

michail = Михаил Иванов <mivanov@gmail.com>

Создаем пустую директорию и клонируем в нее svn репозиторий. Клонирование произойдет с полным переносом истории изменений. Если переход на git осуществляется окончательно, то нет смысла тащить ненужные в дальнейшем метаданные. Для этого используем параметр —no-metadata

Если считать, что authors.txt создан в папке ~/source, клонируем мы в ~/source/repos-git и адрес svn репозитория http://svn.domain/repos

cd ~/source/repos-git

git svn clone --follow-parent --no-metadata --username eddy --authors-file=../authors.txt http://svn.domain/repos/ .

Создаем пустой репозиторий на BitBicket. Предположим его путь https://bitbucket.domain/scm/pj/repos.git. Инициализируем репозиторий данными:

git remote add origin https://bitbucket.domain/scm/pj/repos.git

git push -u origin --all

Процесс переноса Subversion на Git завершен!

Exit mobile version