18.6. Использование CVS для создания однопользовательских локальных репозиториев

Проблема

Вы хотите создать личный локальный репозиторий на базе CVS, потому что собираетесь использовать CVS в крупном проекте и хотите привыкнуть к этой системе. А может быть, ваш личный репозиторий становится слишком сложным, и вы хотите использовать возможности CVS, включая поддержку более сложной структуры каталогов и возможность одновременного извлечения нескольких файлов или целых каталогов.

Решение

CVS легко масштабируется от хранения персональных данных до крупных проектов. Процесс установки прост. Пакеты (как RPM, так и .deb) называются «cvs»; если вы предпочитаете собрать программу из исходных текстов, загрузите их с сайта https://www.cvshome.org/.

После установки CVS создайте личный репозиторий следующими командами:

$ mkdir ~/cvsroot
$ chmod -R 700 ~/cvsroot
$ cvs -d ~/cvsroot init

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

$ cd /scripts
$ cvs -d ~/cvsroot import scripts jenns_configs version1
N scripts/useradd.txt
N scripts/postfix_ube.txt
N scripts/logparse.pl
No conflicts created by this import

Во время импорта запускается текстовый редактор по умолчанию с предложением ввести описание проекта. Вводите достаточно подробное описание, чтобы, вернувшись к этому через полгода, вы смогли сразу понять его суть.

Чтобы извлечь файл для редактирования, сначала создайте рабочий каталог вне репозитория CVS. Затем перейдите в рабочий каталог и извлеките файл:

$ mkdir ~/sandbox
$ cd ~/sandbox
$ cvs -d ~/cvsroot checkout scripts/postfix_ube.txt
cvs checkout: Updating scripts
U scripts/postfix_ube.txt

При извлечении файлов в рабочем каталоге CVS создается локальный рабочий каталог, или «песочница», где и выполняется вся работа. Всегда работайте в «песочнице» и не редактируйте файлы прямо в репозитории CVS. Имя «песочницы» выбирается произвольно.

В нашем примере извлечённый файл находится в каталоге scripts, который является «песочницей». Перейдите в этот каталог, чтобы отредактировать файл:

$ cd scripts
$ vim postfix_ube.txt

Завершив редактирование файла, сохраните его обычным способом и верните в репозиторий командой commit:

$ cvs commit
cvs commit: Examining .
/home/jenn/cvsroot/scripts/postfix_ube.txt
new revision: 1.2; previous revision: 1.1

При этом запускается редактор по умолчанию, где вводится запись журнала с описанием изменений. Когда вы находитесь в «песочнице», для операций извлечения и занесения файлов имя репозитория можно не указывать.

Комментарий

Синтаксис команд CVS таков: cvs [глобальные параметры] команда _ключи_команды _аргументы_команды. Не жалейте времени на ввод подробных записей журнала — вы не раз похвалите себя за это в ходе проекта.

Имя корневого каталога CVS выбирается произвольно. Аргументы jenns_config и version1 при импорте определяют метку поставщика и номер версии соответственно. Метка поставщика обычно указывает, от кого получены исходные файлы, а второй аргумент задает начальный номер версии проекта.

Каждый проект должен храниться в отдельном каталоге, даже если он состоит из одного файла. Из репозитория можно извлекать как отдельные файлы, так и группы файлов или целые каталоги:

$ cvs checkout scripts/postfix_ube.txt
$ cvs checkout scripts/postfix_ube.txt scripts/logparse.pl
$ cvs checkout scripts

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

См. также

Локальная документация (/usr/share/doc/cvs/html-info/cvs_l.html); домашняя страница CVS (https://www.cvshome.org/).