Меню:


С распространением распределенных систем контроля версий (distributed version control systems), появилась необходимость в реализации их поддержки в Emacs. Для поддержки конктретных реализаций распределенных систем контроля версий были созданы отдельные пакеты, которые реализовали поддержку специфической системы, с учетом разницы в идеологии и командах.

Однако как упоминалось ранее, для поддержки большинства централизованных систем контроля версий существует пакет VC, описанный в разделе VC, поэтому была начата разработка пакета DVC, который должен реализовать общее ядро для поддержки различных распределнных систем контроля версий. Пакет DVC во многом является продолжением разработки пакета Xtla, и разрабатывается той же командой разработчиков. Подробно о пакете можно прочитать на сайте проекта.

Архитектура пакета и поддерживаемые системы контроля версий

DVC имеет многоуровневую архитектуру. На самом верхнем уровне находятся функции обеспечивающие автоматическое определение системы контроля версий и выполнение функций, общих для всех систем контроля версий. Уровнем ниже находится функции, специфические для каждой из систем контроля версий. И на самом нижнем уровне находятся функции, используемые подсистемами, отвечающими за работу с конкретными системами контроля версий.

В настоящее время DVC поддерживает следующие системы контроля версий:

название в DVC система контроля версий
xhg mercurial (aka hg)
xgit git
baz GNU Arch (tla) & Bazaar 1.x
bzr Bazaar-NG
xmtn Monotone
xdarcs Darcs

Не все системы контроля версий имеют полную поддержку в DVC. На сайте вы можете посмотреть таблицу, в которой перечислены поддерживаемые для каждой из систем функции.

Установка пакета

Установка пакета достаточно проста — необходимо скачать дистрибутив с сайта проекта, распаковать его, и установить с помощью стандартной последовательности команд:

./configure
make
make install

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

(add-to-list 'load-path "path_to_installed_package")
(require 'dvc-autoloads)

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

Начало работы с пакетом

DVC можно пользоваться используя общее знание о соответствующей системе контроля версий - для всех основных команд системы контроля версий имеются соответствующие функции DVC, начинающиеся с префикса dvc-1.

Основной командой используемой пользователем можно считать команду dvc-status (она доступна через глобальное сочетание клавиш C-x V s), которая создает буфер со списком измененных файлов с который похож на интерфейс PCL-CVS. Название буфера зависит от того, какая система контроля версий используется для данного репозитория, но в общем виде оно выглядит как *VCS-status*, где VCS заменяется на название соответствующего backend, реализующего функции работы с конкретной системой контроля версий.

После получения буфера со статусом репозитория, в нем можно производить различные операции. В этом буфере автоматически включается режим dvc-diff, для которого определено некоторое количество специальных команд. Интерфейс и управляющие клавиши очень похожи на те, которые применяются в PCL-CVS, так что на освоение пакета DVC уходит очень мало времени.2 Часть операций также доступна для выполения через меню. DVC создает несколько меню — DVC-Diff, DVC-Buffers и отдельное меню по названию используемой системы контроля версий, которое предназначено для выполнения команд, относящихся к конкретной системе. DVC-Buffers содержит список открытых буферов DVC и используется для операций над этими буферами. Меню DVC-Diff в свою очередь используется для доступа к командам, общим для всех систем контроля версий — получение изменений, удаление файлов, отмена изменений и т.п.

Также как и в PCL-CVS, некоторые команды могут выполняться не над отдельными файлами, а над группами. Для установки пометки используется клавиша m, а для снятия пометки — u. Кроме того, можно воспользоваться клавишей backspace, которая снимает пометку с предыдущего файла.

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

Просмотр файла осуществляется либо с помощью функции dvc-diff-jump-to-change (клавиша RET), которая открывает файл и переходит к первой изменённой строке, либо с помощью функции diff-goto-source (клавиша o или средняя кнопка мыши). С помощью команды dvc-dired-jump (C-x C-j) можно также перейти к нужному файлу в буфере Dired.

Чтобы откатить сделанные изменения можно воспользоваться командой dvc-revert-files (клавиша U или C-x V f R). А вот подтверждение изменений может быть сделано одной из двух команд: dvc-log-edit или dvc-add-log-entry. dvc-log-edit (клавиша c или C-x V c) открывает буфер, в который вы можете ввести текст, описывающий изменения, и затем выполнить команду dvc-log-edit-done (она привязана к привычному сочетанию клавиш C-c C-c). Вторая команда — dvc-add-log-entry (t или C-x V a) отличается от первой лишь тем, что сообщение будет выглядеть лучше — в стиле файлов ChangeLog. Находясь в буфере статуса, можно сохранить сделанные изменения в виде отдельного файла. Это выполняется с помощью функции dvc-save-diff (сочетание клавиш W s).

Для просмотра сделанных изменений определено несколько функций. Для непосредственного просмотра изменений из буфера *VCS-status* могут использоваться функции dvc-diff-diff (клавиша =) или функция dvc-diff-ediff (клавиша e). Вторая функция отличается тем, что для просмотра изменений запускает ediff. Для быстрого переключения между буфером с изменениями и соответствующим элементом в буфере статуса, может использоваться функция dvc-diff-diff-or-list (клавиша j) — она работает в обоих буферах. А с помощью функции dvc-diff-view-source (клавиша v) можно открыть отдельное окно с файлом и рассмотреть изменённый участок файла. Для того, чтобы просматривать содержимое буфера с изменениями, не переключаясь в него, определены две функции — dvc-diff-scroll-down-or-diff (M-=) и dvc-diff-scroll-up-or-diff (M-RET), которые прокручивают буфер с изменениями вверх и вниз.

Кроме этих функций, определены ещё три функции, которые могут выполняться не из буфера *VCS-status* и имеют глобальные привязки клавиш. Функция dvc-diff (привязана к C-x V =) отображает изменения между текущим и предыдущим состояниями репозитория. Функции dvc-file-diff (C-x V d) и dvc-file-ediff (C-x V e) показывают изменения для конкретного файла, используя буфер или ediff, соответственно.

Для просмотра журнала изменений (log) также определено несколько команд, действующих как в буфере статуса, так и привязанных к глобальным сочетаниям клавиш. Так, команда dvc-log (L или C-x V L) показывает список изменений для файла или проекта в сокращённой форме. Для файла, находящегося в текущей позиции буфера статуса, можно посмотреть этот же журнал с помощью команды dvc-diff-log (клавиша l). Полный же журнал изменений можно посмотреть с помощью команды dvc-changelog (C-x V l). Все эти команды могут принимать префиксный параметр, определяющий то, сколько последних изменений необходимо показать. По умолчанию показываются все изменения.

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

Достаточно часто пользователю приходится выполнять и различные работы с файлами — добавлять, удалять их и т.п. DVC определяет несколько команд, которые предназначены для выполнения этих задач. Команда dvc-add-files (a или C-x V f a) добавляет текущий или выбранные файлы в репозиторий. Для удаления выбранных файлов из репозитория служит команда dvc-remove-files (клавиши d или r, или глобальное сочетание C-x V f D). Есть ещё одна команда для удаления файлов — dvc-purge-files (C-x V f X), которая удаляет файлы с диска, не оставляя резервных копий. Поскольку практически все современные системы контроля версий поддерживают операцию переименования файлов, то DVC также предоставляет эту возможность с помощью команды dvc-rename (C-x V f M).

Для работы с файлами, которые зарегистрированы в системе контроля версий, но не отображены в буфере статуса, пользователь может использовать команду dvc-inventory (C-x V i), которая отображает список файлов, известных данной системе контроля версий. В этом буфере пользователь может использовать те же команды, и сочетания клавиш, что и в буфере статуса.

Пользователь может управлять списком объектов (файлов и каталогов), которые будут известны системе контроля версий. Обычно, в каждой из систем контроля версий, существует список игнорируемых файлов, который может изменяться пользователем3. Для быстрого выполнения этой задачи, определено несколько команд. Команда dvc-ignore-files (# i или просто i) помещает выбранные файлы в список игнорируемых объектов. Команда dvc-ignore-file-extensions (# I или M-I) также изменяет этот список, но туда попадают не полные имена файлов, а только их расширения, что часто бывает очень удобным. Ну а если вам необходимо изменить этот список другим способом — удалить файл из этого списка, или добавить сложное регулярное выражение, то тут можно воспользоваться командой dvc-edit-ignore-files (# e), которая откроет список игнорируемых объектов и позволит его отредактировать. При этом синтаксис файла, зависит от используемой системы контроля версий.

Если вы хотите создать новый репозиторий в текущем каталоге, то вы можете использовать функцию dvc-init (C-x V I) которая запросит у вас название системы контроля версии, которую вы хотите использовать, и затем выполнит все необходимые действия по инициализации репозитория.

Ветки и сторонние репозитории

Работа с разными репозиториями и ветвями является актуальной для пользователей распределённых систем контроля версий, поэтому DVC представляет достаточный набор возможностей для выполнения этих задач.

Для всех поддерживаемых систем контроля версий имеется общий набор команд, обеспечивающий основную функциональность. Но поскольку DVC является развитием проекта Xtla, то для GNU Arch и Bazaar имеется больший набор функций — закладки для репозиториев и т.п. (описание соответствующих функций можно найти в разделе Пакет Xtla. Модули для других систем контроля версий также могут предоставлять дополнительные команды.

Общими для всех систем контроля являются следующие команды:

Команда Сочетание клавиш Описание
dvc-missing M m или C-x V m показывает список изменений, присутствующих в удалённом репозитории
dvc-merge M M или C-x V M скачивает и применяет изменения из удалённого репозитория
dvc-pull M f или C-x V F скачивает изменения из удалённого репозитория (не применяя их)
dvc-update M u или C-x V u применяет скачанные изменения к текущему репозиторию
dvc-push C-x V P переносит изменения из текущего репозитория в удалённый репозиторий
dvc-submit-patch C-x V p отправляет сделанные в текущем репозитории изменения на указанный почтовый адрес
dvc-bookmarks C-x V b открывает буфер, содержащий закладки, с адресами удалённых репозиториев
dvc-clone C-x V C клонирует удаленный репозиторий
dvc-create-branch C-x V o c создает новую ветку разработки
dvc-select-branch C-x V o s переключается на другую ветку разработки
dvc-list-branches C-x V o l показывает список существующих веток разработки

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

Чтобы покинуть буфер со статусом репозитория, пользователь может выполнить команду dvc-buffer-quit (клавиша q). А чтобы обновить содержимое буфера, достаточно выполнить команду dvc-generic-refresh (клавиша g).

Получить справку по использованию пакета можно используя стандартные средства Emacs — находясь в буфере статуса, нажмите C-h m и вам будет выдано описание действующего режима, вместе со списком допустимых клавиш, и названий соответствующих команд. Список глобальных сочетаний клавиш, относящихся к пакету, можно получить с помощью сочетания C-x V C-h. Кроме того, в состав пакета входят различные "советы" (tips), с которыми можно ознакомиться с помощью команды dvc-tips-next-tip, и в появившемся буфере, можно использовать клавиши n и p для перехода к следующему или предыдущему совету.

DVC в процессе своей работы открывает некоторое количество буферов, и для того, чтобы было легче перемещаться между ними, предоставляет некоторое количество команд. При просмотре вложенных друг в друга изменений можно воспользоваться командой dvc-diff-master-buffer (клавиша ^) для перехода в главный буфер с изменениями. DVC также для каждого буфера устанавливает специальную переменную, указывающую на буфер-партнёр, связанный с текущим буфером общей задачей. Это позволяет быстро переключаться между этими буферами с помощью команды dvc-buffer-pop-to-partner-buffer (клавиша h).

Аналогичным образом можно просматривать и буфера, используемые DVC в своих целях. Команда dvc-open-internal-log-buffer (B L) открывает буфер, содержащий все команды выполненные пакетом. А с помощью команды dvc-show-process-buffer (B p) можно посмотреть на результат выполнения внешних команд, вызываемых пакетом для выполнения тех, или иных действий.

Настройка пакета

Настройка пакета осуществляется с помощью стандартных механизмов настройки Emacs. Соответствующая группа настройки имеет название dvc.

Некоторые режимы, реализуемые пакетом, предоставляют пользователю возможность установки параметров буферов путём запуска специальных хуков. Так например, команда dvc-status запускает хук dvc-diff-mode-hook (если он определён) при завершении инициализации буфера статуса.


1. Кроме того, каждый из модулей, реализующий поддержку конкретной системы контроля версий, определяет собственный набор функций, соответствующих командам этой системы контроля версий и который может быть отличным от команд DVC. Например, модуль реализующий поддержку Mercurial объявляет функции с префиксом xhg-, которые могут напрямую быть вызваны пользователем, если для них нет соответствия среди функций DVC.

2. Стоит отметить, что многие команды также доступны вне буфера *VCS-status*. Для их выполнения надо к соответствующей клавиатурной команде добавить глобальный префикс <code>C-x V. В данном тексте эти команды будут помечаться глобальные.

3. Пользователь может видеть игнорируемые файлы в буфере статуса, если установит переменной dvc-status-display-ignored в значение t.

Last change: 05.03.2013 16:54

blog comments powered by Disqus