Анна Сергеева. Система контроля версий Mercurial. Общий обзор и начало работы // Системный администратор. 2016. № 7-8. С. 96-99.
Самое необходимое для ознакомления и начала работы с системой контроля версий Mercurial с примерами работы через графическую оболочку TortoiseHg Workbench
Опубликовано в разделе "Разработка / Тестирование"
Эта же статья на сайте журнала
В разработке современных, достаточно сложных программных приложений часто оказываются задействованы целые команды специалистов, которые постоянно и длительно модифицируют большие объемы исходного программного кода.
Для успешного управления процессами разработки все подобные изменения необходимо тщательно и непрерывно отслеживать и каким-то образом упорядочивать. Опытные руководители проектов разработки программного обеспечения настоятельно рекомендуют применять специальные методологии и инструменты контроля изменений. Это позволяет избежать путаницы в ходе реализации проектов, сократить время разработки и в конечном итоге повысить качество выпускаемого программного обеспечения.
В тех командах, которые используют контроль версий, все разработчики автоматически взаимодействуют между собой всякий раз, когда выполняют наиболее значимые операции в проекте. Речь идет о помещении кода в репозиторий иизвлечении из него, о присвоении тегов, о формировании ветвей кода и их слиянии и т.д. Такое взаимодействие помогает каждому из участников команд разработчиков ориентироваться в существующей структуре достаточно сложных проектов, а также дисциплинирует исполнителей при документировании всех новых вносимых изменений. Таким образом, достаточно полную информацию о ходе развития проекта можно получить в любой момент времени.
Существует ряд наиболее широко применяемых систем контроля версий в сфере разработки программного обеспечения, одной из которых заслуженно является Mercurial благодаря своей стабильности, богатому набору поддерживаемых функций и доступности практически на всех платформах. Система Mercurial создана вместо системы CVS, которая была прежде одной из наиболее популярных, но теперь заметно устарела и поэтому остро нуждалась в замене более современным аналогом.
В данной статье ознакомимся с общими возможностями данной системы контроля версий, позволяющими быстро начать работать с Mercurial. Некоторые наиболее полезные функции, но требующие детальной настройки, более подробно будут рассмотрены в следующих статьях серии.
Инсталляция
Наиболее удобно использовать инсталлятор TortoiseHg [1]. Он включает графическую оболочку TortoiseHg Workbench, набор полезных утилит и настройки специального расширения для Windows Explorer, которое позволит управлять файлами. В контекстное меню для файлов будут добавлены операции Mercurial. В таком случае, вся установка выполнится в один шаг.
Настройка аккаунта
После завершения установки, окне настроек графической оболочки TortoiseHg Workbench можно задать рабочий аккаунт. В качестве File > Settings > Global Settings > Commit > Username достаточно указать текущий логин пользователя (рис. 1).
Рис.1. Настойка рабочего аккаунта для идентификации пользователя в системе Mercurial.
Структура хранения файлов
В наиболее распространенной, но, к сожалению, устаревшей, системе контроля версий CVS, схема хранения была такая:
- Центральное хранилище на сервере, где хранятся «официальные» версии файлов;
- Рабочие копии этих файлов на локальном компьютере.
В отличие от CVS, Mercurial – это одноранговая система. Здесь каждый компьютер, на который установлен Mercurial, имеет свое хранилище файлов. Кроме того, в организации, как правило, может быть выделен специальный сервер с установленным Mercurial, где хранятся «официальные» версии файлов. Схема получается такая:
- Центральный репозиторий файлов на сервере;
- Локальный репозиторий файлов на каждом компьютере;
- Рабочие копии файлов на каждом компьютере.
Термин «Репозиторий» в Mercurial соответствует термину «Модуль»или «Проект» в CVS. Например, в CVS был модуль ClassLibrary, а в Mercurial это будет репозиторий ClassLibrary.
В файловом менеджере каждый репозиторий представляет собой отдельный каталог.
Принцип работы с репозиторием
Обычная схема работы с репозиториями в Mercurial следующая:
- Вытащить файлы из центрального репозитория с сервера в локальный репозиторий (операция Pull).
- Обновить свои рабочие файлы из локального репозитория (операция Update).
- Сделать изменения в рабочих файлах.
- Зафиксировать изменения в локальном репозитории (операция Commit).
- Продвинуть содержимое локального репозитория в центральный репозиторий на сервере (операция Push).
Пример работы из командной строки
Вся работа с Mercurial выполняется запуском утилиты hg с командой в виде параметра из командной строки. Например, для клонирования проекта и продвижения изменений потребуется выполнить последовательность команд:
hg clone https://selenic.com/repo/hello
cd hello
<редактирование_файлов>
hg add <новые_файлы>
hg commit -m 'My changes'
hg push
Для создания и фиксирования проекта в репозитории последовательность команд следующая:
hg init <директория_проекта>
cd <директория_проекта>
<добавление_новых_файлов>
hg add
hg commit -m 'Initial commit'
Полный список команд для работы из командной строки приведен в документации на сайте Mercurial [2].
Пример работы из графической оболочки
Наиболее наглядно взаимодействие с Mercurial можно проиллюстрировать при работе с помощью графической оболочки TortoiseHg Workbench.
Например, участник команды разработчиков asergeeva желает работать с репозиторием ProjectsDocs. Этот репозиторий существует на сервере example.org и хранится в каталоге /home/hg, но на локальном компьютере пользователя пока ничего нет (Mercurial, естественно, установлен).
На первом этапе, необходимо получить «официальную» версию файлов, хранящихся на общем сервере.
Сначала нужно создать на локальном компьютере каталог ProjectsDocs, где будут храниться рабочие файлы.
А затем, создать локальный репозиторий ProjectsDocs в только что созданном каталоге. При этом репозиторий должен быть не пустой, а содержащий копию репозитория с сервера. Для этого вызвать в TortoiseHg Workbench команду меню «File -> Clone Repository».
В диалоговом окне (рис. 2) в качестве Destination выбрать путь к вновь созданному каталогу ProjectsDocs. В качестве Source указать ssh://asergeeva@hg.spb.example.org//home/hg/ProjectsDocs.
Рис.2. Клонирование копии из центрального репозитория.
Здесь:
ssh: //- используемый протокол;
asergeeva – логин пользователя на сервере;
example.org – имя сервера;
//home/hg/ - место на сервере, где расположены репозитории. Здесь внимание нужно обратить на обязательный двойной слэш;
ProjectsDocs – имя репозитория.
В результате выполнения операции, создается локальный репозиторий в каталоге C:\Work\ProjectsDocs.
В процессе взаимодействия с сервером, система запрашивает пароль. Стоит отметить, что пароль запрашивается при каждом обращении к центральному репозиторию. Будь то создание новых репозиториев, копирование файлов из центрального репозитория в локальные копии, при фиксировании всех изменений, при передаче изменений на сервер, синхронизации, объединении ветвей кода, и т. д.
Однако, существует возможность задать такие настройки системы, чтобы не было необходимости задавать пароль каждый раз заново. Эта опция достаточно востребована среди пользователей систем хранения версий Mercurial, но требует выполнить целый ряд специальных действий. Описание всех этих действий будет в следующей статье.
Допустим, спустя некоторое время пользователь снова желает поработать с файлами в данном репозитории. За это время, другие участники команды могли внести ряд изменений в файлы и зафиксировать их на сервере. Так что, чтобы получить последнюю актуальную версию из центрального репозитория, нужно вытащить оттуда изменения в свой локальный репозиторий.
Для этого, в дереве репозиториев на панели слева необходимо выбрать ветку ProjectsDocs, а из панели инструментов вызвать команду Synchonize (ссылка на центральный репозиторий уже будет заполнена) (рис. 3).
Рис.3. Синхронизация с центральным репозиторием.
По нажатию кнопки Post Pull все изменения передаются в локальный репозиторий (рис. 4). Далее в окне Revision Details можно обновлять рабочие файлы до тех или иных ревизий из локального репозитория.
Рис.4. Получение актуальной версии из центрального репозитория.
После изменений файлов, у участника команды возникает необходимость зафиксировать изменения — сначала в локальном репозитории.
Для этого, на вкладке Commit в списке измененных файлов выбрать те, которые нужно зафиксировать, и нажать кнопку Commit (рис. 5). В результате выполнения операции, изменения будут зафиксированы в локальном репозитории.
Рис.5. Получение актуальной версии из центрального репозитория.
На заключительном этапе, можно уже передать зафиксированные изменения и в центральный репозиторий. Для этого достаточно просто нажать кнопку Push, и все изменения передадутся на сервер в центральный репозиторий и окажутся в общем (public) доступе в качестве официальной актуальной версии файлов.
Заключение
Практика использования Mercurial показала, что внедрение данной системы контроля версий является достаточно быстрым в установке и первичной настройке, удобным для понимания большому количеству пользователей (в данном случае, участников команды разработчиков программного обеспечения).
Такие системы являются достаточно мощным современным инструментом для отслеживания большого числа изменений исходного кода, вносимых параллельно многими участниками команды в ходе разработки крупных и сложных программных продуктов, а также для упорядочивания, систематизации и контроля всех изменений. Наглядный интерфейс графической оболочки улучшает восприятие информации о текущем положении проекта и дает возможность оперативной синхронизации кода на локальных машинах пользователей и в центральном репозитории.
Как следствие, руководство имеет четкое видение хода развития проектов и планирования их реализации. Разработчики получают возможность сократить время создания кода и избежать путаницы в его модификации. Все это вместе, несомненно, вносит свой значительный вклад в повышение качества выпускаемого программного обеспечения.
Литература
[1] Официальный сайт разработчиков проекта Mercurial - https://www.mercurial-scm.org
[2] Документация по проекту Mercurial - https://www.mercurial-scm.org/guide
Ключевые слова
Система хранения версий, репозиторий, Mercurial, CVS, TortoiseHg, TortoiseHg Workbench.