Один репозиторий для Mercurial и git

Компания Fog Creek, известная пользователям по продукту Trello, приоткрыла завесу тайны над своим следующим долгожданным проектом. Им стал Kiln Harmony – единый хостинг для репозиториев git и Mercurial (hg). Изначально подразумевающий свою работу исключительно на платной основе, он все же предоставляет все желающим 45-ти дневный пробный период. Наличие на рынке великого множества хостингов Mercurial + git (в т.ч. и бесплатных) поставило бы под большое сомнение ценность данной новости, если бы не одно «но». Главной особенностью Kiln Harmony является то, что репозитории на хостинге одновременно представляют собой как Mercurial, так и git репозитории. Разработчики заявляют о завершении великого холивара, поскольку теперь все желающие могут сосредотачивать все свое внимание на написании кода, минуя муки выбора системы контроля версий. В рамках использования единого репозитория на хостинге Kiln Harmony не требуется заниматься «танцами с бубном» и выполнять установку каких-либо специальных расширений. Отныне все таинство остается исключительно на совести сервера.

Так, работая через web, пользователь в первую очередь замечает переключатель режима представления «как в Git»/«как в Mercurial». Большая часть интерфейсов (в т.ч. просмотр файлов либо диффов) характеризуется практически полным отсутствием отличий, тогда как нюансы начинают проявлять себя уже в ходе просмотра subrepositories/submodules.

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

В случае достаточно простого репозитория с одной веткой происходит максимально «прозрачная» синхронизация git master с Mercurial tip. В случае же наличия нескольких веток последние будут превращены в Mercurial в bookmarks. Данное решение является вполне очевидным и уже не раз обсуждалось специалистами.

Область неизведанного начинается там, где предпринимаются попытки «обратной» трансляции веток – из Мercurial в git. Прежде всего, Mercurial допускает наличие анонимных веток без уникального идентификатора, что в представлении git определенно выглядит не самым лучшим образом. Наряду с этим в Mercurial существуют т.н. «named branches», совсем не похожие на git branch и не имеющие какого-либо аналога в git в принципе. Данная проблема была решена ребятами из Fog Creek достаточно хитро: каждой анонимной ветке автоматически присваивается свой bookmark, что открывает возможность дальнейшей работы по схеме git branch = hg bookmark. Что же до «named branches» Mercurial, то они особым образом транслируются в git refs.

Значит ли все вышеперечисленное, что всю жизнь проработавшему с Mercurial и обходившемуся без использования bookmarks человеку теперь будет нужно дополнительно готовиться к автоматическому их появлению на каждой анонимной ветке? Нет и еще раз нет. Таинство всех преобразований будет происходить лишь где-то в недрах сервера. При этом можно будет использовать даже старую версию Mercurial, не поддерживающую функционал bookmarks.

Для более подробного ознакомления с другими нюансами и тонкостями технической реализации Kiln Harmony следует обратиться к блогу непосредственных разработчиков проекта.