Меню:


Пакет PCL-CVS предоставляет пользователю эффективные средства с системой контроля версий CVS, которая широко распространена в мире свободного программного обеспечения. Кроме стандартных возможностей, которые реализованы пакетом VC, данный пакет предоставляет следующие возможности:

Данный пакет является частью поставки GNU Emacs начиная с версии 21, а также доступен в виде пакета для XEmacs. Для других версий Emacs вы можете найти исходные тексты по адресу ftp://flint.cs.yale.edu/pub/monnier/pcl-cvs.

Основные понятия и принципы работы

Вся работа с пакетом осуществляется в специальном буфере, создаваемом командами PCL-CVS. Этот буфер называется *cvs*, и в нем отображается состояние файлов, находящихся в выбранном каталоге, который содержит ваш проект. Пакет работает только с проектами, уже извлеченными из репозитория, так что вам нужно это сделать перед выполнением команд PCL-CVS.

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

При работе с файлами в проекте, каждому из файлов присваивается определенный статус, и список доступных команд может зависеть от статуса файла.

Данные в буфере отображаются в несколько колонок:

Поле статуса может содержать следующие значения:

Added
файл был добавлен, но изменения еще не были подтверждены в репозиторий;
Removed
файл был удален, но изменения еще не были подтверждены в репозиторий;
Modified
данный файл был изменен. Для этого статуса может быть показан дополнительный статус merged, который обозначает что были внесены изменения в репозиторий, и они были совмещены с вашими изменениями безо всяких конфликтов;
Conflict
был обнаружен конфликт между вашими изменениями в проекте, и изменениями в репозитории. Обе версии изменений записываются в файл, но при этом сохраняется оригинальный файл, который именуется как .#FILE.VERSION. Конфликты также могут возникать по другим причинам, которые вы можете узнать посмотрев на дополнительный статус данного файла. Дополнительный статус может иметь следующие значения: removed — вы удалили файл, но кто-то внес в репозиторий новую версию; added — вы добавили файл, но кто-то тоже добавил файл в репозиторий; modified — вы изменили файл, но кто-то другой удалил этот файл из репозитория.
Unknown
файл не зарегистрирован, и не входит в список игнорируемых файлов;
Up-to-date
файл соответствует версии в репозитории. Поле дополнительного статуса может сообщить дополнительную информацию о файле: added — вы только что добавили файл в репозиторий; updated — файл был обновлен в соответствии с данными репозитория; patched — аналогично статусу updated, но обновление происходило более эффективным методом, это происходит в тех случаях, если вы изменяли файл; commited — вы подтвердили изменения в репозиторий;
Need-Update
репозиторий содержит более свежую версию, или файл был добавлен в репозиторий и у вас его еще нет;
Need-Merge
вы внесли изменения в файл, и кто-то также внес изменения в файл в репозитории, так что необходимо совместить эти изменения;
Missing
файл был внезапно удален из вашего каталога, но для него не была выполнена команда 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)
показывает изменения между выбранными файлами и головной (HEAD) версией соответствующего файла данной ветви разработки;
cvs-mode-diff-repository (d r)
показывает изменения между базовой и головной версиями выбранных файлов в текущей ветке разработки;
cvs-mode-diff-backup (d b)
показывает изменения между резервной версией файла и файлом. Эта команда особенно полезна в случаях возникновения конфликтов при слиянии изменений между файлами;
cvs-mode-diff-vendor (d v)
показывает изменения между выбранными файлами и головной версией в ветви производителя (vendor branch);
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

blog comments powered by Disqus