Создание личного репозитория CVS

Опубликовано mensh - ср, 11/05/2008 - 14:04

CVS (Concurrent Versions System), присутствующая практически во всех дистрибутивах Linux, легко масштабируется от хранения персональных данных до больших проектов.

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

Для создания личного репозитория создается корневой каталог репозитория (имя и место расположения корневого каталога CVS выбирается произвольно):

oleg@localhost:~:$ mkdir ~/cvsroot

Устанавливаются права, позволяющие пользоваться репозиторием лишь его владельцу:

oleg@localhost:~:$ chmod -R 700 ~/cvsroot

Командой init создается и инициализируется репозиторий:

oleg@localhost:~:$ cvs -d ~/cvsroot init

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

oleg@localhost:~:$ cd ~/webprojects/linuxcookbook/

Затем каталог (дерево каталогов) импортируется в репозиторий:

oleg@localhost:~/webprojects/linuxcookbook:$ \
> cvs -d ~/cvsroot import linuxcookbook mensh version1

Аргументы mensh (метка поставщика) и version1 (номер версии) необходимы для нормальной работы CVS.

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

CVS: Enter log. Lines beginning with `CVS:` are removed automatically
CVS:
CVS:----------------------------------------------------------------------

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

После введения описания проекта, сохранения и закрытия происходит импорт:

cvs import: Importing /home/oleg/cvsroot/linuxcookbook/content
N linuxcookbook/content/passwordfilesintegrity.html
N linuxcookbook/content/cvslocalrepositorycreating.html
N linuxcookbook/content/groupadd.html
N linuxcookbook/content/cupsservinglinuxclients.html
N linuxcookbook/content/sudo.html
N linuxcookbook/content/cddvdrecordintro.html
...

No conflicts created by this import

Теперь за пределами корневого каталога репозитория CVS создается рабочий каталог, в который будут извлекаться файлы для редактирования (из репозитория можно извлекать отдельные файлы, группы файлов и целые каталоги):

oleg@localhost:~:$ mkdir ~/sandbox

Выполняется переход в созданный рабочий каталог:

oleg@localhost:~:$ cd ~/sandbox
oleg@localhost:~/sandbox:$

Из репозитория извлекается необходимый каталог с подкаталогами и всеми файлами в рабочий каталог:

oleg@localhost:~/sandbox:$ cvs -d ~/cvsroot checkout linuxcookbook
cvs checkout: Updating linuxcookbook
cvs checkout: Updating linuxcookbook/content
U linuxcookbook/content/adduser.html
U linuxcookbook/content/cdbootdiskcreating.html
U linuxcookbook/content/cdcopy.html
U linuxcookbook/content/cddvdrecordintro.html
U linuxcookbook/content/cdfiletreecreating.html
U linuxcookbook/content/cdrecordaudio.html
U linuxcookbook/content/cdrecordblank.html
U linuxcookbook/content/cdrecordmultisession.html
U linuxcookbook/content/cdrecordportable.html
U linuxcookbook/content/cdrecordscanbus.html
U linuxcookbook/content/cdrecordsplit.html
U linuxcookbook/content/cups.html
...

При извлечении файлов из репозитория CVS в каталоге ~/sandbox/linuxcookbook — „песочнице“ — создается каталог для работы с файлами и каталог CVS с набором административных файлов CVS:

oleg@localhost:~/sandbox/linuxcookbook:$ ls -l
drwxr-xr-x 2 oleg users 4096 2008-11-05 16:21 CVS/
drwxr-xr-x 3 oleg users 4096 2008-11-05 16:31 content/

Файл после редактирования сохраняется и возвращается в репозиторий CVS командой commit:

oleg@localhost:~/sandbox/linuxcookbook:$ cd content
oleg@localhost:~/sandbox/linuxcookbook/content:$ vim adduser.html
oleg@localhost:~/sandbox/linuxcookbook/content:$ cvs commit

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

CVS: Enter log. Lines beginning with `CVS:` are removed automatically
CVS:
CVS: Comitting in .
CVS:
CVS: Modified files:
CVS: adduser.html
CVS:----------------------------------------------------------------------

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

cvs commit: Examining .
Checking in adduser.html;
/home/oleg/cvsroot/linuxcookbook/content/adduser.html,v <-- adduser.html
new revision: 1.2; previous revision: 1.1
done

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