Баннер мобильный (1) Пройти тест

Mercurial

Глоссарий

24 октября 2023

Поделиться

Скопировано

Содержание

    Mercurial (или Hg по обозначению химического элемента ртути в таблице Менделеева) — кроссплатформенная распределенная система управления версиями исходного кода и других (как правило, текстовых) файлов. Впервые она появилась в 2005 году в результате лицензионного конфликта, произошедшего между разработчиками утилит для ОС Linux и создателем платформы BitKeeper Ларри Маквоем. Hg Mercurial позволяет добавлять, удалять, изменять и синхронизировать различные версии исходного кода. В первую очередь система предназначена для работы с большими репозиториями и отличается поддержкой полностью децентрализованных хранилищ.

    Что такое Mercurial

    В своей работе программисту часто приходится редактировать и дорабатывать свой код. При этом вносимые изменения не всегда дают нужный результат, поэтому необходимо иметь возможность откатить код к более старым версиям. Из-за этого появляется множество версий, которые нужно где-то хранить. Простое сохранение кода в папках на собственном ПК или в облаке неудобно, особенно при работе над большими проектами, — в них легко запутаться, упустить нежелательные изменения, ошибки и т. д.

    Ситуация еще больше осложняется, когда над одним проектом трудится несколько программистов, каждый из которых вносит свои изменения в программный код. Это создает путаницу, которая заметно осложняет взаимодействие между разработчиками и тормозит работу. Другая проблема — это увольнение программиста, после которого остается множество несистематизированных версий, в которых новому специалисту предстоит разбираться долгое время. 

    Система контроля версий Mercurial — это набор написанных на языке Python скриптов, позволяющих сохранять различные версии кода в репозиториях. Причем в качестве физического хранилища можно использовать абсолютно любую аппаратную платформу, не обязательно отдельный выделенный сервер, как это реализовано в другой популярной системе управления версиями GitHub. Репозиториев можно создавать неограниченное (точнее, на сколько хватит свободного места) количество как на своем собственном ПК, так и на компьютерах других пользователей. Также в Mercurial есть возможность обмениваться версиями с другими разработчиками, синхронизировать изменения и т. д.

    Следует отметить, что в репозиториях хранятся не сами файлы с кодом, а именно изменения. Это существенно сокращает объем занимаемого пространства, что особенно полезно, когда хранилище создается на локальном ПК. 

    Как организован рабочий процесс в Mercurial

    Работа с версиями исходного кода в Mercurial происходит следующим образом.

    • На личном ПК пользователь создает новый локальный репозиторий — либо открывает новый, либо клонирует уже имеющийся.
    • В каталоге созданного репозитория осуществляется редактирование, добавление или удаление файлов.
    • В локальном хранилище фиксируются изменения, внесенные в файлы.
    • Далее этапы 2 и 3 осуществляются столько раз, сколько необходимо для выполнения задачи.
    • Из локальных репозиториев, размещенных на ПК других пользователей, извлекаются и переносятся сделанные ими изменения, которые синхронизируются с теми, которые внес первый разработчик.
    • Пользователь также может сам отдать внесенные им в программный код изменения другим разработчикам.

    То есть основную часть работы пользователь проводит в локальном репозитории на своем ПК. А затем при необходимости переносит ее результаты в хранилища, расположенные на других компьютерах. Также есть возможность настроить автоматическую отправку изменений в чужие репозитории каждый раз, когда система фиксирует редактирование кода. 

    Общий механизм работы Mercurial подразумевает, что любые изменения, внесенные в код, даже если они бесполезны, сохраняются как на локальном, так и на внешних репозиториях. Однако разработчику действительно часто необходимо редактировать или удалять эти изменения. Поэтому в Mercurial реализовано локальное изменение истории, которое не затрагивает внешние репозитории. Сделано это потому, что ревизии кода, сохраненные на них, могут использоваться в работе другими разработчиками, давать начало новым ветвям изменений. Чтобы отслеживание публичности и приватности изменений было удобным для пользователей, в Mercurial задействована система фаз. Всего их три:

    • Public (публичная) — к этой фазе относятся изменения, уже опубликованные во внешних репозиториях, из-за чего редактировать их нельзя.
    • Draft (черновик) — это локальный набор изменений, который пока никуда не отправлялся, из-за чего его еще можно изменять — до первой публикации во внешних репозиториях, автоматически переводящей его в фазу public.
    • Secret (секретная) — к этой фазе пользователь вручную относит те изменения, которые он по какой-либо причине не хочет публиковать (редактировать их можно свободно).

    То есть, когда пользователь только создает набор изменений, они имеют статус Draft. Как было сказано выше, в Mercurial предусмотрена как ручная, так и автоматическая публикация ревизий во внешних репозиториях. Как только это происходит, изменения получают статус Public и менять их уже нельзя. Если пользователь хочет в течение какого-то времени локально работать с этими изменениями или иметь возможность вернуться к ним в будущем, то ему нужно явно придать им статус Secret.

    Каталог изменений

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

    Сами ревизии, сделанные пользователем, сохраняются в виде сетевой структуры взаимосвязанных друг с другом позиций (графов). Для ориентации самой Mercurial внутри этого множества наборов изменений используется система идентификаторов, включающая:

    • Номер ревизии. Это целое число (от 0 и более), показывающее порядок добавления в репозиторий. Система присваивает ревизии номер автоматически и с помощью него идентифицирует конкретный набор изменений. Для одного и того же набора ревизий, хранящихся в разных клонах репозитория, этот идентификатор может отличаться. Например, в обозначении 4:e1be1898f374 номер ревизии указан перед двоеточием.
    • Идентификатор набора изменений. Это SHA-1-хеш, состоящий из цифр и букв a, b, c, d, e, f. Система генерирует его для каждого набора изменений также автоматически, вычисляя на основе их содержимого. Поэтому данный идентификатор принадлежит одному и тому же набору изменений во всех хранилищах. Риск того, что один SHA-1-хеш будет обозначать два разных набора ревизий, крайне невелик. 
    • Так как идентификатор представляет собой достаточно длинную последовательность цифр и букв, в Mercurial предусмотрена возможность не вводить полную строку при выполнении команд. Достаточно указать лишь первые несколько символов, однозначно идентифицирующих конкретный набор ревизий. Если введенных знаков будет недостаточно, система оповестит об этом пользователя. В примере обозначения 4:e1be1898f374 идентификатор указывается после двоеточия.
    • Метки (теги). Это символическое имя, которое присваивается каждому набору изменений в дополнение к номерам и идентификаторам. У одного набора ревизий может быть одна или несколько меток. Имя тега не может содержать некоторые символы — в частности, двоеточие, которое используется в обозначении ревизий для разделения между идентификатором и номером. Если пользователь применил в теге недопустимый символ, система сразу же оповестит об этом.
    • Название ветки. Оно идентифицирует не конкретный набор изменений, а их ветку, то есть побочную группу графов в структуре каталога. Название ветки присваивается ей при создании и никогда не изменяется. 

    Основные рабочие команды в Mercurial

    Для работы с версиями программного кода и их изменениями в Mercurial используются следующие команды.

    • Работа с репозиторием: hg init — создает новое хранилище в текущей директории; hg clone — клонирует его; hg pull — извлекает ревизии из репозитория; hg push — пересылает изменения на сервер.
    • Работа с ветками: hg branch — создает новую и дает ей название; hg branches — показывает все текущие; hg branch — отображает ту, в которой расположена рабочая копия; hg heads — демонстрирует головные изменения в существующих ветках; hg update — обновляет рабочую директорию до уровня, зафиксированного в головной ревизии, hg merge — объединяет текущую ревизию с головной в указанной ветке.
    • Работа с тегами: hg tag — присваивает метку текущей ветке изменений.
    • Работа с изменениями: hg commit — фиксирует текущее состояние программного кода, сохраняя ревизии в репозитории.

    Так как основной инструмент работы с Mercurial — это консоль, она продумана таким образом, что название любой команды можно сокращать для удобства. Однако делать это можно только до того момента, пока название команды остается однозначным:

    • К примеру, вместо hg commit можно использовать сокращения hg commi, hg comm или hg com. Однако при введении hg c Mercurial откажет в выполнении и сообщит, что «команда ‘c’ неоднозначна», так как это имя может обозначать несколько директив.
    • Другой пример: применять директиву hg co для сокращенного обозначения hg commit тоже нельзя, так как она является псевдонимом для hg update. В то же время для команды hg commit можно использовать сокращение hg ci.

    Преимущества Mercurial

    Кроссплатформенность. Mercurial адаптирована под все основные операционные системы — Windows, Linux и MacOS. Благодаря этому взаимодействовать с одними и теми же наборами изменений могут пользователи, использующие разные платформы, что существенно упрощает совместную работу над проектом.

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

    Открытый исходный код. Mercurial является бесплатным программным обеспечением. Это делает ее более доступной для отдельных разработчиков и маленьких команд, не располагающих большим бюджетом. 

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

    Широкая функциональность. Mercurial предлагает полный набор инструментов, необходимых для работы с различными версиями исходного кода. С ее помощью можно создавать, удалять, редактировать ревизии, отправлять изменения в другие репозитории и получать их, объединять, разъединять, переносить ветки и т. д. Встроенный функционал системы можно расширить за счет интегрируемых расширений. Некоторые из них предназначены для интеграции Mercurial с другими системами управления версиями — например, GIT.

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

    Строгая модель работы. В отличие от других систем управления версиями, Mercurial позволяет глубоко контролировать версии и вносимые в код изменения. В частности, в системе можно отследить ветку изменений с самого начала, сопоставлять различия между ревизиями по единому стандарту и т. д. Все эти функции делают работу с версиями более прозрачной и удобной.

    Адаптивность и масштабируемость. Mercurial можно легко приспособить под специфику конкретного проекта за счет возможности включения и отключения некоторых функций, установки дополнительных расширений и т. д. Система позволяет непрерывно работать над одним и тем же проектом на всех этапах его развития — от небольшого прототипа, созданного одним разработчиком, до сложного продукта, над которым работает команда специалистов. 

    Небольшой вес. Сама система занимает немного пространства на жестком диске компьютера, а ее работа не требует больших затрат аппаратных ресурсов. Благодаря этому ее могут применять пользователи, располагающие маломощным или устаревшим «железом», а также новички, учащиеся бюджетных образовательных учреждений и т. д.

    Недостатки Mercurial

    Консольная ориентация. Несмотря на то что в Mercurial предусмотрен графический интерфейс, основной инструмент для работы в этой системе — консоль. Это может отпугнуть некоторых пользователей, особенно новичков, привыкших к GUI, а также замедлить работу над проектом. Кроме того, реализованный в Mercurial графический интерфейс не отличается большим удобством. 

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

    Mercurial изначально разрабатывалась как универсальная система контроля версий, то есть пригодная для работы как над небольшими и простыми, так и над сложными проектами. Поэтому ее могут использовать практически все категории пользователей, начиная от новичков, делающих первые шаги в кодинге, до профессиональных программистов, работающих над коммерческими программами, играми и т. д. Особенно полезна Mercurial будет в совместной работе нескольких специалистов. С ее помощью реализовано множество известных программных продуктов с открытым исходным кодом, среди которых веб-браузер Mozilla, почтовая-система и веб-сервер nginx, медиаплеер Xine и т. д. 

    Поделиться

    Скопировано

    0 комментариев

    Комментарии