Проект

Общее

Профиль

Действия

Миграция SVN -> GIT

Пример миграции:

Задача: мигрировать svn репозиторий https://svn.nolty.ru/abackup/ в git репозиторий :abackup.git

Находим список пользователей (коммитеров SVN):

svn log https://svn.nolty.ru/abackup/ |grep '^r[0-9]\+ ' | cut -d ' ' -f3 | sort | uniq > ~/svn.nolty.ru-git-converted/git-users.txt
vi git-users.txt

git-users.txt

volkov = Volkov Andrey <email@mydomain.ru>
ivanov = Ivanov Ivan <ivan@mydomain.ru>

Ставим ruby, rubygems, git-svn

ubuntu:

sudo apt-get install git-core git-svn ruby rubygems

gentoo пакеты:

dev-vcs/git subversion perl
dev-vcs/subversion perl
dev-ruby/rubygems

Устанавливаем gem svn2git в домашнюю папку (чтобы не портить систему):

gem install -V --user-install --no-ri --no-rdoc --source http://gemcutter.org svn2git
export RUBYOPT=-rauto_gem

Если проект содержит стандартные папки tags, trunk, branches, то продолжаем.
Если что-то не по стандарту, то используем опции svn2git:

--trunk TRUNK_PATH           Subpath to trunk from repository URL (default: trunk)
--branches BRANCHES_PATH     Subpath to branches from repository URL (default: branches)
--tags TAGS_PATH             Subpath to tags from repository URL (default: tags)
--notrunk                    Do not import anything from trunk
--nobranches                 Do not try to import any branches
--notags                     Do not try to import any tags

В моем случае все по стандарту.
Конвертируем:

mkdir ~/svn.nolty.ru-git-converted/abackup
cd ~/svn.nolty.ru-git-converted/abackup
~/.gem/ruby/1.8/gems/svn2git-2.1.0/bin/svn2git https://svn.nolty.ru/abackup/ --authors ../git-users.txt -v

Смотрим, что получилось:

git branch -l
git tags -l

Складываем сконвертированный git репозиторий на сервер git.nolty.ru:

git remote add origin git@git.nolty.ru:abaсkup.git
git push --all
git push --tags

Обновлено Андрей Волков больше 12 лет назад · 4 изменени(я, ий)