Ни для кого не секрет, что 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 завершен!