Миграция с SVN на Mercurial

Mar 9, 2013 16:43 · 324 words · 2 minute read cvs

Сегодня хотелось бы поведать о переходе с svn на hg. Subversion использовался для коммерческих продуктов, которые не хотелось выкладывать на github. Поймите меня правильно — я сторонник open source, но клиенты настаивали именно на закрытости, и их понять можно. Проблем с svn особых не было отчасти потому что я работал один, отчасти потому что много от него не требовал — update, commit, log, checkout, — линейная элементарная история. Но, поработав с mercurial на работе, осознал все прелести DVCS. До этого был опыт работы с git, и он мне показался переусложнённым для единственного разработчика, хотя знание его уже считается необходимым минимумом. Stage area, локальные ветки и пр. как-то не прибавляли интуитивности, зато hg — тот же subversion, только децентрализованный (со всеми вытекающими плюсами).

Итак, приступим. Дано: база svn по адресу /mnt/svn/base, надо перенести все коммиты на hg. Сразу стоит сказать, что службу svn можно и не запускать (на всякий случай команда для запуска: svnserve -d -r /mnt/svn). Для переноса нам понадобится плагин convert. Он идёт вместе с дистрибутивом, но по умолчанию выключен. Включить его можно путём добавления пары строчек в /etc/mercurial/hgrc:

[extensions] 
hgext.convert =

Да-да, после равно ничего писать не надо — mercurial умный и сообразит, что файл надо взять из каталога плагинов. У меня это svnserve /usr/lib/python2.7/dist-packages/hgext. К слову, плагины представляют собой питоновские модули, что не может не радовать 🙂

Плагин подключён, теперь одной командой

$ hg convert file:///mnt/svn/base/YourProject

конвертируем историю svn в историю hg. Здесь стоит подробнее остановиться на пути к проекту. /mnt/svn/base — физическая часть пути, то есть она находится на винте, а YourProject — svn'овская, то есть которая находится в базе subversionа. По умолчанию берётся подкаталог trunc. На выходе мы получаем каталог YourProject-hg с единственным каталогом .hg. чтобы увидеть файлы проекта надо всего лишь обновиться (hg update). Огромное спасибо авторам сего замечательного плагина 🙂

Вот так я подсел на mercurial и вместе с ним на bitbucket 🙂 Заодно минус одна служба на компе и не надо больше заморачиваться с локальными бекапами.