Mercurial | это... Что такое Mercurial? (original) (raw)
Mercurial
Тип | Система управления версиями |
Разработчик | Matt Mackall |
Написана на | Python и Си |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 19 апрель 2005 (2005-04-19)[1] |
Лицензия | GNU GPL v2 |
Сайт | mercurial.selenic.com |
Mercurial (англ. ртутный, подвижный), он же Hg (от обозначения химического элемента ртути) — кроссплатформенная распределённая система управления версиями, разработанная для эффективной работы с очень большими репозиториями кода. В первую очередь она является консольной программой.
Содержание
- 1 Описание
- 2 Концепции
- 3 Неочевидные моменты
- 4 Дополнительные средства
- 5 Проекты, использующие Mercurial
- 6 Примечания
- 7 Ссылки
- 8 Литература
Описание
Система Mercurial написана на Python, хотя чувствительные к производительности части (например, своя реализация diff) выполнены в качестве модулей-расширений на C. Mercurial первоначально была написана для Linux, позже портирована под Windows, Mac OS X и большинство Unix-систем. Репозитории Mercurial управляются при помощи утилиты командной строки hg
.
Наряду с традиционными возможностями систем контроля версий, Mercurial поддерживает полностью децентрализованную работу (отсутствует понятие основного хранилища кода), ветвление (возможно вести несколько веток одного проекта и копировать изменения между ветками), слияние репозиториев (чем и достигается «распределённость» работы). Поддерживается обмен данными между репозиториями через HTTP/HTTPS, SSH[2] и вручную при помощи упакованных наборов изменений.
Утилита hg
обладает компактным интерфейсом, и Mercurial считается более простой в освоении системой, чем, например, git.[3]
Концепции
Рабочий процесс
Mercurial является распределенной (децентрализованной) системой контроля версий. Это означает, что рабочий процесс, как правило, выглядит следующим образом:
- На личном компьютере создается новый репозиторий (путем клонирования существующего репозитория, создания нового и т. п.);
- В рабочей директории данного репозитория изменяются/добавляются/удаляются файлы;
- Выполняется фиксация (commit) изменений в данный репозиторий (то есть в локальный репозиторий на личном компьютере);
- Шаги 2 и 3 повторяются столько раз, сколько необходимо;
- При необходимости производится синхронизация изменений с другими репозиториями: забираются (pull) чужие наборы изменений и/или отдаются (push) собственные.
То есть вся повседневная работа происходит в локальном репозитории, а когда возникает необходимость, производится отправка результатов своей работы в один или несколько других репозиториев. Количество шагов при работе с отдаленными репозиториями можно сократить, если настроить Mercurial на автоматическую отправку изменений в другие репозитории при выполнении фиксации[4].
Консольная программа
Консольная программа реализована таким образом, что название любой команды можно сокращать до тех пор, пока её имя остаётся однозначным. Плюс некоторые команды имеют псевдонимы. Например, вместо hg commit
можно написать hg commi
, hg comm
или hg com
, но если написать hg c
, то Mercurial откажется выполнять эту команду, сообщив, что «команда 'c' неоднозначна» и приведя список команд, которые попадают под это сокращение. Использовать hg co
в качестве сокращения для hg commit
нельзя, так как это псевдоним для команды hg update
.
Логическая структура наборов изменений
Когда выполняется фиксация изменений (вызывается команда hg commit
), Mercurial сохраняет в репозиторий набор изменений (он же «changeset», он же «ревизия»). Физически это означает, что в каталоге «.hg» будут созданы новые и изменены текущие служебные файлы (для более глубокого ознакомления со структурой каталога «.hg» см. главу «За кулисами» книги «Mercurial: Полное руководство»).
Полезно представлять все наборы изменений, которые когда либо были зафиксированы в виде большой связанной сети, где каждый набор изменений связан с одним или двумя другими наборами изменений.
Узнать идентификаторы родительских наборов изменений, с которыми связаны зафиксированные наборы изменений можно с помощью команды hg log --debug
. У каждого набора изменений будет два родителя (благодаря чему возможно ветвление внутри репозитория, см. hg -v help branch
). Значение «-1:0000000000000000000000000000000000000000» означает отсутствие родителя. Например, у самого первого набора изменений в репозитории данное значение будет проставлено для обоих родителей, а у последующих данное значение будет проставлено для второго родителя (если для них в репозитории не использовалось ветвление), а для первого родителя будет проставлен идентификатор от предыдущего набора изменений.
Рабочую директорию также полезно представлять в виде такого же набора изменений (который пока не зафиксирован, но, возможно, вскоре также будет зафиксирован). Рабочая директория также связана с одним или двумя родительскими наборами изменений, узнать о которых можно с помощью команды hg parents
. После фиксации изменений данные родители станут родителями для нового (уже зафиксированного) набора изменений.
Идентификация наборов изменений
Номер ревизии
Номер ревизии представляет собой целое число, отражающее порядок, в котором наборы изменений были добавлены в хранилище. Номер ревизии начинается с нуля, присваивается набору изменений автоматически и может использоваться для идентификации наборов изменений. Номер ревизии для одного и того же набора изменений может различаться в каждом из клонов хранилища. В выводе команды hg log
номер ревизии можно увидеть перед двоеточием (например, «4:e1be1898f374»).
Идентификатор набора изменений
Идентификатор набора изменений представляет из себя SHA-1 хеш, состоящий из цифр и букв «a, b, c, d, e, f», например, «e1be1898f3747386c41c8a5c5776e87373f6d3d3». Идентификатор набора изменений присваивается каждому набору изменений автоматически, вычисляется на основе содержимого этого набора изменений, поэтому соответствует одному и тому же набору изменений во всех репозиториях. Вероятность коллизии, когда для двух разных наборов изменений будет сгенерирован один и тот же SHA-1 хеш, крайне мала.
Mercurial не требует ввода полной строки идентификатора при использовании его в командах, ему достаточно лишь той его начальной части, которая однозначно идентифицирует требуемый набор изменений (в противном случае, Mercurial сообщит о неоднозначности). В выводе команды hg log
идентификатор набора изменений можно увидеть после двоеточия (например, «4:e1be1898f374»). Без параметра --debug
команда hg log
выводит не полный, а сокращенный (из 12 символов) идентификатор набора изменений.
Метки
В дополнение к номеру ревизии и идентификатору набора изменений, Mercurial предоставляет возможность присваивать каждому набору изменений одно или более произвольных символических имен, называемых метками (или тегами). Присваиваются метки с помощью команды hg tag
, а посмотреть все добавленные метки можно с помощью команды hg tags
. Имя метки не может содержать некоторые символы (например ": "), о чем, в случае необходимости, Mercurial сообщит при выполнении команды hg tag
.
Везде, где в командах можно указать идентификатор набора изменений, можно подставить имя метки.
Закладки
Именованные ветки
Неочевидные моменты
В этом разделе не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.Эта отметка установлена 6 августа 2012. |
---|
- Если в качестве идентификатора ревизии какой-либо команде передано число, то Mercurial будет считать, что ему передан номер ревизии и будет выполнять проверку на неоднозначность с сокращенным идентификатором наборов изменений только, если отсутствует набор изменений с указанным номеров ревизии. Например, если в репозитории существует один набор изменений с номером ревизии «6» и другой набор изменений с идентификатором «647362ac74d76124267215af1a3f94aa9707dfdf» (начинается с цифры «6»), то команда
hg log -r 6
выдаст информацию о первом наборе изменений, не сообщив о неоднозначности. Поэтому, если глобальный идентификатор начинается с цифры, полезно всегда сокращать его лишь до тех пор, пока в нем не встретится буква. Данное поведение наблюдалось в версии 2.2.1 под Mac OS X 10.7.4. - Если создать метку с именем, например, «5», в то время как в репозитории существует (или появится в будущем) набор изменений с номеров ревизии «5», то Mercurial будет искать в первую очередь наборы изменений по номеру ревизии. Но если создать метку с именем, например, «e1be», в то время как в репозитории существует (или появится в будущем) набор изменений с идентификатором наборов изменений, начинающимся с «e1be», то Mercurial будет искать наборы изменений в первую очередь уже по меткам. Притом, в обоих случаях о неоднозначности сообщено не будет. По этой причине не рекомендуется создавать метки, состоящие только из цифр и/или букв «a, b, c, d, e, f». Данное поведение наблюдалось в версии 2.2.1 под Mac OS X 10.7.4.
- Нельзя добавить в репозиторий пустую папку (Для решения этой проблемы положите в папку любой файл, например, .hgignore). Такое поведение связано с тем, что Mercurial не отслеживает папки, а только файлы[5]. Поведение реализовано осознано для упрощения системы и пока что изменений не планируется[5].
Дополнительные средства
В комплекте с Mercurial поставляются CGI-сценарии для предоставления веб-интерфейса к репозиториям[2].
Есть графическая оболочка TortoiseHg[6], работающая как под Windows (с интеграцией в Explorer), так и под Linux (в виде отдельного приложения[7] или с интеграцией в Gnome/Nautilus[8]). Существует разрабатываемый консольный клиент hgtui для Linux и Windows (с использованием cygwin).
Ряд сред разработки имеет возможности для работы с Mercurial, например Microsoft Visual Studio[9][10], IntelliJ IDEA[11][12][13], Eclipse[14], Qt Creator (начиная с версии 2.0)[15], PIDA[16], NetBeans[17]. Возможна работа с Mercurial из Emacs c помощью входящего в Emacs универсального пакета VC.
Экспериментальная поддержка Mercurial есть в системе Trac[18]. Проект Redmine[19] также поддерживает репозитории Mercurial.
При помощи утилиты Tailor[20] или расширения convert[21] поддерживается конвертирование[22] репозиториев других систем контроля версий, включая CVS, Subversion, Git, Perforce, Darcs, GNU Arch, Bazaar.
Проекты, использующие Mercurial
Значительное количество проектов по разработке свободного программного обеспечения использует Mercurial в качестве основной системы контроля версий.[23] В их числе:
- Mozilla и Mozdev
- OpenOffice.org[24]
- OpenJDK
- Netbeans
- OpenSolaris
- ALSA
- Xen
- Dovecot
- MoinMoin
- XINE
- wmii и dwm
- mutt
- Vim[25]
- XEmacs
- NTFS-3G
- Adium[26]
- Gajim
- Go
- CPython[27]
- Minecraft Coder Pack[28]
Поддерживаются Mercurial-зеркала основных репозиториев других проектов[29], например, GCC, GNU Emacs и Linux.
Примечания
- ↑ Mercurial v0.1 — a minimal scalable distributed SCM
- ↑ 1 2 Настройка сервера для работы с Mercurial (рус.)
- ↑ Сравнение Git и Mercurial в FAQ сайта Google Code (англ.)
- ↑ mercurial automatic push on every commit (англ.)
- ↑ 1 2 FAQ — Mercurial
- ↑ TortoiseHg — Mercurial
- ↑ SourceForge.net: TortoiseHg — Develop
- ↑ SourceForge.net: TortoiseHg — Develop
- ↑ VisualHG — плагин-провайдер для Microsoft Visual Studio 2008/2010
- ↑ HgSccPackage — Mercurial-плагин для Microsoft Visual Studio 2008/2010
- ↑ Mercurial Integration for IDEA
- ↑ hg4idea
- ↑ JetBrains IntelliJ IDEA Plugin Repository
- ↑ Mercurial Eclipse
- ↑ Qt Creator: Using version control systems
- ↑ Появление поддержки Mercurial в PIDA
- ↑ Mercurial-плагин для NetBeans
- ↑ Mercurial Plugin for Trac
- ↑ Repositories in Redmine
- ↑ Tailor
- ↑ ConvertExtension в Mercurial Wiki
- ↑ RepositoryConversion в Mercurial Wiki
- ↑ Some projects that use Mercurial (англ.)
- ↑ OpenOffice.org development switches to Mercurial — GullFOSS
- ↑ Planning Vim 7.3 — vim_use | Google Groups
- ↑ Adium — Switching to Mercurial
- ↑ CPython hg transition complete
- ↑ seargedp - Updating MCP to 1.3.2
- ↑ Projects with synchronized Mercurial repositories (англ.)
Ссылки
- Домашняя страница Mercurial (англ.)
- Документация по Mercurial (рус.)
- Книга «Mercurial: Полное руководство» (рус.) (другие форматы)
- Сборник статей о Mercurial (рус.)
Литература
- Bryan O'Sullivan Mercurial: The Definitive Guide. — O'Reilly Media, Inc., 2009. — 288 с. — ISBN 9780596800673
Системы управления версиями (категория) | ||
---|---|---|
Только локальные | RCS • SCCS | |
Клиент-серверные | CMVC • CVS • Perforce • Rational ClearCase (1992) • SourceGear Vault • Subversion (SVN) • Team Foundation Server • Visual SourceSafe | |
Распределённые | Bazaar • Darcs • Fossil • Git • Mercurial • TeamWare | |
Ветви • Дельта-кодирование • Форк |