Открыть сервис

Mercurial

Mercurial — это распределённая система управления версиями (DVCS), предназначенная для эффективного отслеживания изменений в исходном коде и других файлах в процессе коллективной разработки программного обеспечения. Разработана как свободное и открытое программное обеспечение, распространяемое под лицензией GNU GPL версии 2. Основное отличие Mercurial от централизованных систем (например, Subversion) заключается в том, что каждый участник хранит полную копию репозитория, что позволяет работать автономно и обеспечивает высокую отказоустойчивость.

История

Проект Mercurial был начат в апреле 2005 года Оливье Мандэлем (Olivier Mengué) и Мэттом Макаллом (Matt Mackall) как ответ на отказ компании BitMover от бесплатного распространения системы BitKeeper, которой ранее пользовались разработчики ядра Linux. Первоначально система называлась «Mercurial» (от лат. mercurialis — «подвижный, изменчивый»), а также имела кодовое имя «hg» — химический символ ртути (Hydrargyrum). Первый публичный релиз (0.1) состоялся в июне 2005 года.

В 2006 году Mercurial был выбран для управления исходным кодом проекта OpenSolaris, а в 2007 году — для разработки ядра NetBSD. Наибольшую известность система получила благодаря использованию в проектах Mozilla (Firefox, Thunderbird) и в корпорации Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ) (до перехода на Git в 2014 году). В 2012 году Mercurial стал основной системой контроля версий для платформы Google Code (позднее заменён на Git). С 2016 года популярность Mercurial начала снижаться на фоне доминирования Git, однако он продолжает применяться в ряде крупных проектов, включая некоторые инструменты разработки корпорации Microsoft и в научных исследованиях.

Архитектура и принципы работы

Распределённая модель

Mercurial использует распределённую модель, при которой каждый клон репозитория является полноценной копией с полной историей изменений. Это позволяет разработчикам работать без постоянного подключения к центральному серверу, а синхронизация происходит путём обмена наборами изменений (changesets) между репозиториями.

Хранение данных

История изменений хранится в виде направленного ациклического графа (DAG), где каждый узел — это набор изменений (ревизия), содержащий метаданные (автор, дата, комментарий) и ссылки на родительские ревизии. Данные сжимаются с использованием алгоритма zlib, а для эффективного хранения больших файлов применяется механизм «общих» блоков (revlog).

Производительность

Mercurial оптимизирован для работы с большими репозиториями и тысячами файлов. Основные операции (commit, diff, log) выполняются быстро благодаря локальному хранению данных и эффективному кэшированию. Размер репозитория обычно меньше, чем у Git, за счёт более агрессивного сжатия.

Команды и интерфейс

Система предоставляет консольный интерфейс с командами, начинающимися с префикса hg (например, hg init, hg clone, hg commit). Команды имеют мнемонические имена и короткие алиасы. Основные команды:

Классификация и виды репозиториев

Mercurial поддерживает несколько типов репозиториев:

Применение

Разработка программного обеспечения

Mercurial применяется для управления версиями в проектах, где требуется высокая надёжность и простота работы. Основные области использования:

Интеграция с платформами

Mercurial поддерживается рядом хостинг-платформ, включая:

Особенности использования в России

В России Mercurial применяется в ряде государственных и коммерческих проектов, где требуется строгий контроль версий и возможность работы в закрытых сетях. Например, некоторые подразделения «Росатома» и «Ростеха» используют Mercurial для управления исходным кодом встроенного ПО и систем управления. Также система популярна среди разработчиков, работающих с большими объёмами данных (например, в научных институтах РАН).

Сравнение с другими системами

Mercurial vs Git

Обе системы являются распределёнными, но имеют различия:

ХарактеристикаMercurialGit
ИнтерфейсПроще, меньше командБолее гибкий, но сложнее
ПроизводительностьВыше при работе с большими файламиВыше при работе с большим количеством мелких файлов
Модель ветвленияВетки — это именованные наборы измененийВетки — это указатели на коммиты
Поддержка WindowsНативная (через MSYS2)Нативная (через Git for Windows)
ПопулярностьНижеДоминирует (>90% проектов)

Mercurial vs Subversion

Subversion — централизованная система, Mercurial — распределённая. Mercurial предоставляет автономную работу, лучшую поддержку ветвления и слияния, а также более высокую надёжность за счёт отсутствия единой точки отказа.

Критика и ограничения

Основные недостатки Mercurial:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →