Меню:


Пакет VC предоставляет пользователю унифицированный интерфейс к различным системам контроля версий. В настоящее время существуют интерфейсы к системам rcs, CVS, MetaCVS, Subversion, GNU Arch, sccs, Darcs, SourceSafe, ClearCase, Git и Mercurial (некоторые из них доступны только в версии GNU Emacs 22.0, репозитории GNU Emacs или с сайтов авторов)1.

Основные понятия и подходы

На развитие пакета VC очень сильное влияние оказала система контроля версий rcs, поэтому некоторые концепции напрямую связаны с принципами использования данного пакета.

Когда файл находится под контролем системы контроля версий, то говорят, что файл "зарегистрирован" в системе контроля версий. Каждому файлу соответствует "главный" файл, который содержит данные и историю изменений. "Главному" файлу может соответствовать "рабочий" файл, в который можно вносить изменения. В некоторых системах контроля версий, вы должны "блокировать" рабочий файл, перед внесением изменений. В других системах контроля версий, вы можете вносить изменения в собственные рабочие версии файлов, и должны явно подтверждать изменения в центральный репозиторий. Для систем контроля версий, в которых требуются блокировка файлов, для внесения изменений необходимо перевести файл из состояния "только для чтения", в режим доступности для записи. Кроме того, в таких системах контроля версий обычно только один пользователь может одновременно вносить изменения в файлы, а остальные пользователи должны ожидать окончания работы данного пользователя. Это в первую очередь касается системы контроля версий rcs.

При работе с пакетом VC некоторая информация отображается в строке состояния. Информация представляется в следующем виде — сначала идет сокращенное название системы контроля версий, контролирующей данный файл, затем идет символ, описывающий состояние файла, а затем отображается номер версии данного файла. Если символ, описывающий состояние файла равен -, то файл не заблокирован или не изменен, а если он заблокирован или изменен, то будет использоваться символ :. В том случае, если файл был заблокирован другим пользователем, то поле статуса будет выглядеть как :user:.

Работа с пакетом

Основная цепочка действий

Основной командой в пакете VC является vc-next-action (C-x v v), которая выполняет следующую логическую команду для данной системы контроля версий. В зависимости от используемой системы контроля версий, порядок команд в цепочке действий может отличаться. Для систем, которые требуют блокировки файла (это rcs, sccs, и CVS при соответствующей настройке), порядок действий следующий:

Для систем не поддерживающих концепцию блокировок, порядок выполнения действия следующий:

Пользователь может задавать префиксные аргументы для команды vc-next-action. Использование префиксного аргумента изменяет поведение команды, что позволяет изменять номер версии под которой файл будет зарегистрирован, номер версии, которую необходимо получить, или изменить имя используемой системы контроля версий, что часто полезно, если файл был зарегистрирован в нескольких системах контроля версий. Ввод описания изменения производится в специальном буфере, который называется *VC-Log*. В нем вы можете ввести сообщение, и подтвердить изменения используя сочетание клавиш C-c C-c, находясь в этом буфере. Чтобы не подтверждать изменения, просто покиньте это буфер без использования C-c C-c. А если вы хотите использовать одно и то же сообщение для нескольких файлов, то вы можете воспользоваться сочетаниями клавиш M-n, M-p, M-s и M-r, которые работают так же как и в мини-буфере, позволяя перемещаться по истории сообщений.

Работа с изменениями

Пакет VC позволяет пользователю просматривать изменения внесенные в процессе работы с файлами. Для получения списка изменений между вашей рабочей версией и последней подтвержденной версией, пользователь может воспользоваться командой vc-diff (сочетание клавиш C-x v =). При использовании данной команды с префиксным аргументом, пользователь может получить список изменений между двумя произвольными версиями. Команда vc-version-other-window (сочетание C-x v ~) позволяет получить произвольную версию файла, и показать ее в отдельном буфере. А некоторые версии систем контроля версий позволяют получать аннотированные версии файлов, находящихся под управлением системы контроля версий. Эту задачу реализует команда vc-annotate, которая запускается сочетанием C-x v g. Аннотированная версия позволяет понять как вносились изменения, и просматривать изменения внесенные в конкретных версиях.

Вы можете отменить внесенные изменения с помощью функции vc-revert (сочетание C-x v u), которая возвращает файл связанный с буфером к версии, на которой он был основан. После выполнения команды vc-revert-buffer файл остается не заблокированным, так что для внесения изменений, вас необходимо снова заблокировать его.

Работа с файлами

Регистрация файла в системе контроля версий производится с помощью команды vc-register (сочетание клавиш C-x v i). Выбор системы контроля версий в которой файл будет зарегистрирован, зависит от нескольких параметров. Если в данном каталоге есть файлы, зарегистрированные в какой-либо системе контроля версий, то используется именно она. Если в каталоге находятся файлы зарегистрированные в нескольких системах контроля версий, то используется та, которая находится первой в списке vc-handled-backends. А если нет ни одного зарегистрированного файла в данном каталоге, то используется первая запись из списка vc-handled-backends. Так что вы зарегистрируете файл в CVS в пустом каталоге только явно указав использовать эту систему контроля версий.

По умолчанию, новый файл получает номер версии равный 1.1. Вы можете использовать другое число, если вы используете числовой аргумент при выполнении данной команды. В том случае, если переменная vc-initial-comment имеет не пустое значение, то данная команда запросит у пользователя комментарий, который будет использован для описания файла. Пакет VC поддерживает переименование зарегистрированных файлов. Для этой цели вы можете использовать команду vc-rename-file, которая переименовывает рабочий файл, а также "главный" файл. К тому же эта команда, обновляет все снимки, чтобы они ссылались на новое имя файла. Но вы не можете использовать эту команду для заблокированных файлов. Для получения информации о текущем файле вы можете использовать команду vc-print-log, которая привязана к сочетанию клавиш C-x v l. Данная команда отображает историю изменений, включая текст комментариев к этим изменениям.

Использование VC совместно с Dired

Команды описанные в предыдущих разделах в первую очередь предназначены для работы с отдельными файлами. Но для больших проектов, часто необходимо работать с множеством файлов — просматривать какие файлы изменились, список изменений и т.п. Для реализации этих действий, пакет VC поддерживает специальный режим — vc-dired-mode. Для создания буфера, использующего такой режим, используется команда vc-directory (сочетание C-x v d). Буфер созданный такой командой почти не отличается от обычного буфера Dired. В буфер помещается рекурсивный список файлов, зарегистрированных в системе контроля версий.

При работе с буфером Dired, данные могут отображаться в сокращенном или полном режиме. В сокращенном режиме показываются только измененные или не обновленные файлы. В полном режиме, показываются все файлы зарегистрированные в системе контроля версий. Пользователь может переключаться между полным и сокращенным режимом с помощью сочетания клавиш v t. При показе данных в буфере, отображается имя пользователя (для систем поддерживающих блокировки) или статус файла (для остальных систем). В буфере с vc-dired-mode действуют все команды Dired, за исключением команды v, которая используется в качестве префиксной для команд пакета VC. Команды VC те же самые, что и описанные в прочих разделах, только не используется префикс C-x, и они могут выполняться к множеству помеченных файлов.

Ветви версий (branches)

Как и другие пакеты для интеграции с системами контроля версий, пакет VC поддерживает работу с разными ветвями версий. Пакет поддерживает создание ветвей, переключение между ними, а также слияние изменений между разными ветвями. Для переключения на другую ветвь разработки пользователю необходимо лишь задать префиксный аргумент для команды vc-next-action. Пользователь может указывать не конкретную версию, а лишь номер ветви. Следующая работа будет производиться именно в этой ветви. Создание новой версии производится аналогичным образом — необходимо лишь при подтверждении изменений с помощью команды vc-next-action указать новый номер версии используя префиксный аргумент. Если пользователь укажет номер для не существующей ветви, то она будет создана. После создания ветви, все остальные действия будут производиться в рамках этой ветви. Для работы с другой веткой, пользователь должен явно переключиться на нее.

Для слияния изменений используется команда vc-merge, которая привязана к сочетанию клавиш C-x v m. Данная команда запрашивает у вас откуда необходимо брать изменения, и применяет их к вашей рабочей версии. Если вы ничего не ввели в ответ на запрос, то будут взяты изменения из ветви с которой вы работаете, если они были подтверждены за время работы с вашим файлом. Если во время работы возникают конфликты, то пакет оповещает пользователя об этом, и помечает конфликты в файле, или даже может запустить Ediff для их разрешения. Вы можете воспользоваться командой vc-resolve-conflicts для разрешения возникших конфликтов. Она запускает новую сессию Ediff, где вы можете просматривать возникшие конфликты, и применять или отвергать предлагаемые изменения.

Взаимодействие с удаленными репозиториями

Некоторые системы контроля версий поддерживают концепцию центрального репозитория, который хранит "главные" файлы, а также историю изменений. Репозиторий может быть локальным, или располагаться на удаленном сервере. VC автоматически распознает тот случай, когда репозиторий располагается на удаленном сервере, и принимает некоторые действия, которые позволяют более комфортно работать с данными, особенно в тех случаях, когда связь является медленной и нестабильной. При первом редактировании файла, создается локальная копия изменяемого файла. Это позволяет выполнять команды получения списка изменений, или отмены внесенных изменений, без какого-либо сетевого взаимодействия. Создаваемая копия файла имеет имя FILE.~VERSION.~. При подтверждении изменений в репозиторий, локальная копия удаляется. Пользователи также могут создавать резервные копии вручную, используя команду vc-version-other-window, разница между резервными копиями созданными автоматически и вручную, лишь в лишнем знаке точка перед знаком ~. Многие команды VC могут использовать любую из резервных копий.

Работа со "снимками"

"Снимок" (snapshot) — это именованный набор версий файлов, который может рассматриваться как отдельная единица. Некоторые системы контроля версий сами поддерживают концепцию "снимков", тогда пакет VC использует эти возможности. Для прочих систем контроля версий, пакет VC сам реализует поддержку "снимков". В этом случае, эти "снимки" видны только при использовании пакета VC. Для работы со "снимками" пакет VC определяет две команды. Команда vc-create-snapshot (сочетание C-x v s) создает "снимок" на базе версий файлов находящихся в текущем каталоге, или ниже. Команда vc-retrieve-snapshot (сочетание клавиш C-x v r) позволяет пользователю получить "снимок" с заданным именем. Многие команды пакета VC позволяют использовать имена "снимков" в качестве аргументов вместо номеров версий файлов. Это особенно полезно просмотре списка изменений между релизами программ.

Прочие команды

Обычно, для файлов находящихся под управлением системы контроля версий, для каждого файла ведется отдельный список изменений. Но в проектах GNU списки изменений ведутся для всего проекта, или для отдельных каталогов. Для организации взаимодействия между этими двумя подходами, пакет VC определяет отдельную команду vc-update-change-log (она привязана к сочетанию C-x v a), которая обновляет общий список изменений на основании списка изменений для отдельных файлов. При использовании префиксов, данная команда позволяет обновить общий список изменений, только изменениями для отдельных файлов.

Также вы можете вставлять в файлы специальные идентификационные заголовки. Эти заголовки зависят от конкретной используемой системы контроля версий, и в некоторых системах, они используются для служебных целей. Для вставки такого заголовка, вы можете использовать команду vc-insert-headers (сочетание клавиш C-x v h). VC автоматически выбирает заголовок подходящий для системы контроля версий. Заголовки хранятся в переменных вида vc-BACKEND-header, так что вы можете изменять их значения, для вставки собственных заголовков.

Настройка

Используя стандартные средства настройки Emacs пользователь может настроить поведение выполняемых команд. Для этого необходимо лишь выполнить M-x customize-group vc. Часть опций применяется ко всем поддерживаемым системам контроля версий, часть применяется только к конкретным реализациям. Полное описание основных переменных, используемых для настройки пакета VC вы можете найти в руководстве по GNU Emacs.

Дополнительная информация

Некоторые из подсистем, обеспечивающих работу пакета VC с разными системами контроля версий доступны только с сайтов их авторов, и пока не включены в поставку GNU Emacs или XEmacs. Вы можете найти эти модули по следующим адресам:

Много информации относящейся к пакету VC, а также к другим модулям вы можете найти на сайте Emacs WiKi. Кроме этого, подробное описание пакета вы можете найти в руководстве по Emacs.


1. Не все модули имеют поддержку всех функций, которые предоставляются пакетом VC, например, модуль vc-arch не реализует функцию vc-cancel-version, и еще некоторые.

Last change: 05.03.2013 16:54

blog comments powered by Disqus