Pull to refresh

Kiln Harmony — Mercurial + git в одном репозитории

Reading time 3 min
Views 10K
Fog Creek – компания созданная Джоелом Спольски и, возможно, известная вам по продукту Trello, на прошлой неделе представила свой новый проект державшийся долгое время в тайне: Kiln Harmony. Это хостинг Mercurial (hg) и git репозиториев. К сожалению, исключительно платный, есть только 45 дней пробного периода. В чём же новость, спросите вы, если Mercurial + git хостинги уже есть на рынке и, в том числе, бесплатные, как Bitbucket.org? Особенность Kiln Harmony в том, что один репозиторий на хостинге одновременно является и Mercurial и git репозиторием! По заявлениям разработчиков великий холивар закончен и теперь вы можете соредоточиться на кодинге, а не на выборе системы контроля версий. Push и pull в единый репозиторий размещённый на Kiln Harmony из вашей любимой системы контроля версий (Mercurial или git) не требует установки отдельных расширений, типа hg-git, или других особых телодвижений, вся магия происходит на сервере.

А магии там на самом деле много.

image
Для начала, при работе через web вы заметите переключатель «Показывать как в Git» или «Показывать как в Mercurial». В большинстве интерфейсов, таких как просмотр самих файлов или диффов, отличий нет. Нюансы появляются при просмотре subrepositories и submodules.

image
Ветвление – особый вопрос, так как именно в подходе к веткам у Mercurial и git больше всего различий. Однако, команда Fog Creek поставила своей целью не менять привычки пользователей. Работаете вы с Mercurial или с git – вы не должны помнить о каких-то особенностях другой системы и перестраивать свой привычный рабочий процесс.

Если ваш репозиторий достаточно прост и имеет только одну ветку — в этом случае всё прозрачно: git master синхронизируется с Mercurial tip.

Если в git репозитории несколько branches, то в Mercurial они превращаются в bookmarks – это решение также очевидно и в большинстве холиваров (в т.ч. на хабре) не раз обсуждалась, что git branch = hg bookmark.

Магия начинается при попытке транслировать ветки в обратную сторону из Мercurial в git. Во-первых, в Mercurial есть анонимные ветки без уникального имени бранча или букмарка, что в git выглядит не очень хорошо. Во-вторых, в Mercurial есть так называемые “named branches”, которые совсем не похожи на git branch и аналога в git нет. Статья для саморазвития: Mercurial: руководство по созданию веток. Для решения этой проблемы ребята из Fog Creek поступили хитро — всем анонимным веткам автоматически присваиваются bookmarks и соответсвенно начинает работать схема git branch = hg bookmark. А Mercurial «named branches» транслируются в git refs (знающий читатель сразу заметит, что при таком подходе в лоб возникнет потеря информации, но более подробное описание тонкостей алгоритма выходит за рамки этой обзорной статьи).

Итак, значит ли это, что если я всю жизнь работал с Mercurial и не использовал bookmarks, то теперь я должен буду их изучить, т.к. они автоматически начнут появляться на всех анонимных ветках? Ответ – нет! Магия происходит автоматически где-то на сервере. Причём вы можете пользоваться старой версией Mercurial, которая даже не поддерживает bookmarks.

Более подробно о других нюансах и их технической реализации можно прочитать в отдельной статье в блоге разработчиков: Detailed articles on exactly how Kiln Harmony works. Кроме того, все желающие приглашаются на сессию вопросов и ответов 19 марта: Kiln Harmony Live Q & A.

Личный взгляд.

Я активный пользователь Mercurial и пассивный пользователь git (git повсюду, иначе никак!). Когда-то в начале своего пути я мечтал о таком сервисе, пробовал hg-git и прочие извращения. На мой взгляд обе системы имеют свои плюсы и минусы. Конечный выбор в наше время больше зависит от конкретной команды разработчиков и от рабочего окружения, а не от тех или иных уникальных функций, которых не так уж и много. Если вы владеете git и попали в команду где вынуждены использовать Mercurial – проще выучить Mercurial, и наоборот. Это под силу любому техническому специалисту и займёт не очень много времени, а в будущем сэкономит гораздо больше сил и средств при общении с коллегами. Так что сервис вряд ли полетит, к тому же за 25$ в месяц на пользователя.
Tags:
Hubs:
+32
Comments 26
Comments Comments 26

Articles