Пакет PCL-CVS предоставляет пользователю эффективные средства с системой контроля версий CVS, которая широко распространена в мире свободного программного обеспечения. Кроме стандартных возможностей, которые реализованы пакетом VC, данный пакет предоставляет следующие возможности:
Данный пакет является частью поставки GNU Emacs начиная с версии 21, а также доступен в виде пакета для XEmacs. Для других версий Emacs вы можете найти исходные тексты по адресу ftp://flint.cs.yale.edu/pub/monnier/pcl-cvs.
Вся работа с пакетом осуществляется в специальном буфере, создаваемом командами PCL-CVS.
Этот буфер называется *cvs*
, и в нем отображается состояние файлов, находящихся в
выбранном каталоге, который содержит ваш проект. Пакет работает только с проектами, уже
извлеченными из репозитория, так что вам нужно это сделать перед выполнением команд
PCL-CVS.
В процессе работы вы можете перемещаться по созданному буферу и выполнять разные команды с выбранными файлами, или файлами на которых находится курсор.
При работе с файлами в проекте, каждому из файлов присваивается определенный статус, и список доступных команд может зависеть от статуса файла.
Данные в буфере отображаются в несколько колонок:
Поле статуса может содержать следующие значения:
.#FILE.VERSION
. Конфликты также могут
возникать по другим причинам, которые вы можете узнать посмотрев на дополнительный
статус данного файла. Дополнительный статус может иметь следующие значения: removed —
вы удалили файл, но кто-то внес в репозиторий новую версию; added — вы добавили файл,
но кто-то тоже добавил файл в репозиторий; modified — вы изменили файл, но кто-то
другой удалил этот файл из репозитория.cvs remove
.Команды, предоставляемые пакетом PCL-CVS имеют префикс cvs-
и имена, аналогичные
подкомандам команды CVS. Для выполнения части команд необходимо наличие буфера *cvs*
,
который создается следующими командами (команды выполняются с помощью сочетания M-x или
через меню Tools
):
cvs-update
cvs update
для указанного вами каталога;cvs-examine
cvs -n update
, которая только проверяет что необходимо
сделать, не внося никаких изменений;cvs-status
cvs status
для указанного вами каталога;cvs-checkout
cvs checkout
для указанного вами модуля;cvs-quickdir
*cvs*
считывая данные из файлов CVS/Entries
. Эта команда
аналогична cvs-examine
, но не осуществляет доступа к репозиторию, что иногда очень
полезно.Эти команды могут выполняться также и из буфера *cvs*
— вы можете использовать M-u
для
выполнения cvs-update
, M-e
для cvs-examine
и M-s
для cvs-status
. Кроме этого, вы можете
использовать соответствующие команды только для выбранных файлов —
O
(cvs-mode-update
)
для обновления файлов, e
(cvs-mode-examine
) для обновления информации о файлах и s
(cvs-mode-status
) для получения информации о выбранных файлах.
По умолчанию, эти команды выполняются рекурсивно, но вы можете изменить это поведение,
используя флаг -l
для команд CVS.
Для перемещения по буферу *cvs*
используются команды cvs-mode-next-line
(клавиша n
) — для
перемещения на следующую строку и cvs-mode-previous-line
(клавиша p
), которая приводит к
переходу на предыдущую строку.
Для работы с пометками используются множество разных команд. Для пометки одного файла
используется команда cvs-mode-mark
(клавиша m
), а для снятия пометки — команда
cvs-mode-unmark
(клавиша u
). Для пометки всех файлов используется клавиша M
(команда
cvs-mode-mark-all-files
), а противоположной ей командой является
cvs-mode-unmark-all-files
, которая привязана к сочетанию клавиш M-DEL
. Вы также можете
пометить файлы, имена которых подпадают под заданное регулярное выражение — команда
cvs-mode-mark-matching-files
(клавиша %
), или которые имеют определенный статус — команда
cvs-mode-mark-on-state
(клавиша S
).
Добавление файлов производится очень простым способом — просто отметьте все нужные файлы
(обычно они имеют статус Unknown), и нажмите на клавишу a (команда cvs-mode-add
). Статус
файлов будет изменен на Added, и затем вы должны подтвердить изменения в репозиторий
(см. раздел Работа с изменениями). Вы также можете использовать эту команду и для файлов
со статусом Removed, что приведет к их восстановлению.
Удаление файлов производится аналогичным образом — вы помечаете файлы, и выполняете
команду cvs-mode-remove-file
(клавиша r
). При выполнении этой команды у вас будет
запрошено подтверждение, и затем файлы будут удалены из каталога. В том случае, если
файлы находятся под контролем CVS, то для них также будет выполнена команда cvs remove
.
Как и в предыдущем случае, вам также нужно будет подтвердить изменения в репозиторий.
Обновление файлов производится с помощью команды cvs-mode-update
, которая привязана к
клавише O
. Это заставляет выполнить команду cvs update
для файлов имеющих статус
Need-update.
Иногда, вам требуется хранить в каталогах проекта, файлы, не зарегистрированные в
репозитории. Такие файлы обычно отображаются со статусом Unknown, но вы можете сообщить
CVS, что эти файлы необходимо игнорировать при выполнении команд, просто перечислив их в
файле .cvsignore
. Для помещения выбранного файла в этот файл, используется команда
cvs-mode-ignore
, которая привязана к клавише i
. Используя ее, вы можете быстро поместить
мешающие файлы в список игнорируемых объектов.
Для подтверждения изменений в репозиторий вам нужно лишь выбрать файлы, изменения для
которых вы хотите подтвердить, а зачем нажать c
(cvs-mode-commit
) или C
(cvs-mode-commit-setup
). Это приведет к возникновению нового буфера с именем
*cvs-commit*
, в котором вы можете ввести описание вносимых изменений. После ввода
сообщения, вам необходимо лишь нажать C-c C-c
и изменения будут внесены в репозиторий. Вы
можете прервать этот процесс в любое время, просто не выполняя команду C-c C-c
. Разница
между командами c
и C
заключается в том, как они относятся к содержимому буфера
*cvs-commit*
. Первая команда сохраняет предыдущее содержимое буфера, в то время как
вторая команда создает буфер заново.
Если вы изменили файл, но не хотите вносить данные изменения в репозиторий, то вы можете
использовать команду cvs-mode-undo-local-changes
, которая привязана к клавише U
. Эта
команда удаляет файл с вашими изменениями, и получает последнюю версию из репозитория.
Вы можете просмотреть изменения внесенные в файл с помощью нескольких команд. Наиболее
часто используемой командой является cvs-mode-diff
, которая вызывается с помощью клавиши
=
или сочетания d =
. Эта команда показывает между измененным
файлом и его базовой версией. Кроме этого, также определен набор команд, которые
выполняют следующие действия:
cvs-mode-diff-head
(d h
)cvs-mode-diff-repository
(d r
)cvs-mode-diff-backup
(d b
)cvs-mode-diff-vendor
(d v
)cvs-mode-diff-yesterday
(d y
)Также, для работы с изменениями вы можете использовать утилиты Ediff и Emerge. Команда
cvs-mode-idiff
(привязана к сочетанию клавиш d e
) запускает Ediff или Emerge (зависит от
выбранных настроек), что позволяет вам интерактивно работать с изменениями. При
использовании команды cvs-mode-imerge
(сочетание клавиш d E
) вы можете выполнить
трехстороннее интерактивное слияние изменений, но если уже существует конфликт в выбранных
файлах, то их содержимое не будет использоваться при работе, и после завершения работы,
все изменения сделанные CVS, будут затерты.
Для получения информации о файлах может использоваться две команды. Команда cvs-mode-log
(клавиша l
) выполняет команду cvs log
для выбранных файлов и результат отображается в
буфере *cvs-info*
. А команда cvs-mode-status
(клавиша s
) выполняет cvs status
для
выбранных файлов и результат отображается в буфере *cvs-info*
.
Команда cvs-mode-tag
(клавиша t
) позволяет вам установить тег на выбранные файлы. По
умолчанию, данная команда применяется только к каталогам, но это поведение зависит от
настроек клиента.
Иногда вам может понадобиться, чтобы в буфере *cvs*
не отображались некоторые записи. Вы
можете сделать это двумя способами — использовать команду cvs-mode-remove-handled
(клавиша x
), которая удаляет из буфера уже обработанные записи, например, файлы со
статусом Up-to-date, или использовать команду cvs-mode-acknowledge
(она привязана к
сочетанию C-k
), которая просто удаляет нужные строки. Обработанные записи могут удаляться
автоматически, в том случае, если переменная cvs-auto-remove-handled
имеет значение не
равное nil
.
Чтобы обновить содержимое буфера *cvs*
, вы можете использовать команду
cvs-mode-revert-buffer
, которая привязана к клавише g
. А для выхода из буфера *cvs*
используется команда cvs-mode-quit
, которая привязана к клавише q
.
Пакет PCL-CVS также определяет несколько дополнительных режимов — для редактирования сообщений для журнала изменений, а также режим для просмотра журнала изменений.
Выполнение команд PCL-CVS зависит от значения некоторых переменных, настройку которых
легче всего осуществить с помощью команды M-x customize-group pcl-cvs
. В эти настройки
входит как настройка самих переменных, так и свойств начертаний, который используются для
отображения информации в буферах данного режима.
Last change: 05.03.2013 16:54