Tuesday, December 06, 2011

Как мигрировать локальный репозиторий SVN на Git/Github

Git предоставляет мост через который можно работать с SVN как с удаленным репозиторием, при этом пользуясь практически всеми возможностями, которые предоставляет Git. Все, что нужно сделать - это научиться пользоваться командой git svn которая идет вместе с инсталляцией клиентской версии git. С миграцей репозитория на Git\Github тоже ничего не должно быть сложного. Достаточно добавить удаленный репозиторий после импорта SVN в локальный проект и набрать команду git push. Эх, если бы все было так просто...Расскажу как у меня это получилось с обходом одной грабли, на которую пришлось наступить.

Для начала устанавливаем клиентскую версиою Git. Я использовал msysgit версии 1.7.8-preview.

Предположим, что наш локальный SVN репозиторий находится в папке C:\workspace\Repository и свн установлен на машине.

Открываем командное окошко (cmd) и набираем команду

svnserve --daemon --root C:\workspace\Repository

Этим мы запустили сервер SVN, который дает нам возможность удаленного доступа к нашему репозиторию по протоколу svn, что даст возможность Git его скачать. Теоретически и документация говорит, что git svn должен понимать протокол file://, но если бы все было так просто... на StackOverflow нашел свою проблему с решением

Далее создаем новую папку в которой будет создан локальный слепок SVN репозитория в GIT формате (в моем случае C:\workspace\git-repository)

Запускаем Git-bash в этой папке из контекстного меню Windows Explorer. И запускаем команду
$ git svn clone svn://localhost --no-metadata

Чем больше репозиторий, тем дольше она будет выполняться. В моем случае на 100 комитов она выполнялась минут 5. После чего у меня появилась папка localhost с содержимым svn репозитория и отображением всего SVN репозитория в локальном репозитории GIT.
Перехожу в эту папку
$ cd localhost/

и связываю локальный репозиторий с удаленным репозиторием Github, который я заблаговременно создал:
$ git remote add origin git@github.com:tdd-elevator-training/elevator.git

после чего мне осталось залить (пушнуть) изменения на сервер, что я с радостью и делаю вот таким способом:
$ git push -u origin master

Все, мой SVN репозиторий полностью со всей историей и даже с сохраненными авторами начальных комитов в Github.

No comments:

Post a Comment