У каждой системы контроля версий своя логика работы, и наверное поэтому они плохо позволяют обмениваться данными друг с другом. Я прекрасно понимаю мысли разработчиков Subversion, которые, создав легкое копирование, отказались одним махом и от тэгов и от бранчей. Но логика подсказывает что бранчи всетаки не такие. Бранчи - это как бы третье измерение контроля версий. Первое измерение - файлы и каталоги, второе - время (история изменений). В Subversion они как бы развернули третье измерение - независимые ветви разработки на первое.
И вот недавно я решил поглядеть на Mercurial.
Вообще я нигиллист наверное. Я и в Subversion никогда не пользовался традиционными trunk/tag/branch, благо это распределение чисто условно. Но вот думаю - как можно содержимое репозитория с такой логикой корректно перенести в репозиторий с правильной? (чем женская логика отличается от железной?) Дык почитай почти никак. Можно перенести все дерево, но функциональность бранчей пропадет. Однако ближе к теме...
Mercurial весьма близок к git. У них одинаковая логика работы, они оба хранят базу изменений непосредственно в рабочем каталоге проекта. В отличии от такого же распределенного monotone, который требует отдельную базу. И еще одно выгодное отличие от monotone в том, что и mercurial и git поразительно быстры. mercurial наверное более дружелюбен к пользователю тем, что имеет меньший набор команд. git в принципе имеет более компактную базу, но чтобы добиваться этой компактности - базу надо специальной командой паковать.
Помню, как в былые времена cvs, доступ к которому можно было получить только по cvs или по ssh протоколу многочисленные проблемы с доступом к репозиторию с работы. Но эти времена прошли. Subversion работает практически как угодно. Не знаю как работает git, но mercurial можно установить просто на http хостинг, правда для вливания в него изменений всеравно придется пользоваться ssh, но какой http хостинг ныне обходится без ssh?
Кроме того, как говорил Линус Торвальд, распределнные системы паразительно удобны. История проекта, которая всегда с тобой.
Но возвращаясь к ранее высказанной мысли - взаимодействие с svn в mercurial в принципе есть. Для этого существуют различные плагины как для импорта, так и для синхронизации. Но не слишком ли разная у них логика работы? Для svn я буду и дальше использовать распределенный svk.
PS: Кстати в mercurial есть замечательная команда - addremove, которая позволяет добавить на контроль все, что не добавлено и удалить все что отсутствует в рабочей копии. Даже в git для этих целей приходится немного нелогично изголяться - git add * - добавить все неподконтрольное; git commit -a - при коммите удалить все отсутствующее.
Хотя, конечно, для разработки это достаточно бесполезная фича, но эта фича достаточно интересна тем, кто формирует свои проекты из имеющегося открытого ПО.
Построить Qt из исходников под Linux
6 месяцев назад