понедельник, 3 мая 2010 г.

from CVS to Hg

Два месяца назад наша компания отказалась от CVS и перешла на Mercurial.
Давно было понятно что продолжать использовать CVS не имеет смысла. Как жестко сказал Linus Torvalds "If you like using СVS, you should be in some kind of mental institution or somewhere else". Было два варианта: Subversion или DCVS. Провели анализ, оказалось что действительно cовременные DCVS такие как Mercurial или Git превосходят Subversion, особенно в branching и merging. В некоторых экзотических случаях Subversion лучше подходит, например если нужно делать sparse checkouts потому что размер репозитория настолько огромен что он не помещается на диске, или если нужно скрыть папки от одних юзеров и наоборот, дать доступ другим юзерам. На практике такое случается редко, у нас размер CVS репозитория был 800 Mb, понятно что sparse checkouts никому не нужны. Дальше, у нас кросс-функциональная команда, каждый девелопер имеет право записи в любую папку,поэтому вторая мега-фича Subversion - ограничение доступа тоже для нас не актуальна. Зато для нас очень важно иметь хороший branching и merging, а здесь DCVS рулят.

Еще один важный момент, интеграция VCS с другими тулзами. Есть Mercurial плагин для Eclipse, он работает медленно при апдейтах на больших проектах (35 000+ файлов). Поэтому лучше использовать черепаху для коммитов и апдейтов, а Mercurial плагин юзать для просмотра истории изменений файла или аннотации. CruiseControl и Hudson интегрируются отлично. Сode Review tool тоже поддерживает Mercurial. Интеграция с JIRA есть, но для нас не имеет значения, потому что Mercurial имеет команду поиска , и если надо найти коммиты по номеру тикета то это всегда можно сделать через веб морду или с командной строки.

При конверсии репозитория СVS в HG главная ветка (head) сконвертилась нормально, остальные 3 ветки сконвертировались не совсем правильно, пришлось их фиксить руками. Проблема с ветками в том, что в СVS невозможно определить время создания бранча, можно только определить время первого коммита в бранч. Поэтому после конверсии в бранчах не хватало файлов которые не были изменены в бранчах. Проблему решил так: после конверсии нашел старые СVS теги которые тегают код непосредственно перед созданием бранча и смерджил бранчи с этими тегами. После этого в бранчах появились все файлы.

Затраты на миграцию. Вечером в конце рабочего дня мы закрыли СVS репозиторий на запись. На следующий день девелоперы потратили пол-дня чтобы настроить environment, после обеда пошли первые коммиты в новый репозиторий. Можно сказать что процесс прошел без потерь. У некоторых девелоперов будет культурный шок, потому что они пытаются применить навыки работы с CVS которые не работают в HG, но после первых коммитов и мерджей это пройдет.

HG дает возможность делать сode review до того как код попадет в сentral repository. Мы коммитим локально, создаем соde review topic на review board, только после того как коммит одобрен, мы пушим в сentral repository. Такой подход трудно реализовать в Subversion, надо возиться с патчами, практически это не реально.

Если вы используете СVS, то я бы советовал перейти на Git или Mercurial, ни в коем случае не Subversion.
Если вы уже используете Subversion, то вопрос миграции не так актуален как с СVS. Если сильно хочется работать с DCVS, то можно не ждать пока компания перейдет на DCVS (мне пришлось ждать полтора года) и использовать две системы одновременно, делать всю работу в DCVS а потом заливать результат в Subversion.

5 комментариев:

Michael комментирует...

> У некоторых девелоперов будет культурный шок, потому что они пытаются применить навыки работы с CVS которые не работают в HG, но после первых коммитов и мерджей это пройдет.

т.е. никакого предварительного обучения небыло?

http://dilbertru.blogspot.com/2010/03/20100313-cmmi.html

Michael комментирует...

но в общем молодцы, так держать

кто был инициатором прехода?

Sergey Grigoriev комментирует...

Был двухчасовой тренинг посвященный основам DCVS.

Sergey Grigoriev комментирует...

Инициаторами перехода на Hg был я с украинской стороны и наш коллега из Дании.

curvedbrain.org комментирует...

>Было два варианта: Subversion или DCVS

Если вариант Subversion таки был, стоит все таки провести профилактику. На всякий случай.