Для создания репозитория CVS, совместно используемого группой пользователей, вначале создается владелец и группа, которым будет принадлежать репозиторий:
root@localhost:~:# groupadd cvsusers
root@localhost:~:# useradd -g cvsusers -u 103 cvs
Затем создается репозиторий:
root@localhost:~:# mkdir /cvsroot
root@localhost:~:# chown -R cvs /cvsroot
root@localhost:~:# chown -R 770 /cvsroot
root@localhost:~:# cvs -d /cvsroot init
root@localhost:~:# chgrp cvsusers /cvsroot
root@localhost:~:# chmod g+s /cvsroot
Для предоставления пользователям доступа к репозиторию они включаются в группу cvsusers (любой пользователь из группы cvsusers сможет импортировать проект в репозиторий).
Включить пользователя в группу cvsusers можно прямым редактированием файла /etc/group:
root@localhost:~:# mcedit /etc/group
...
cvsusers:x:103:oleg
Выполняется переход в каталог с проектом, который будет импортирован в репозиторий:
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 /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
Владельцами нового проекта является пользователь, который его импортировал, и группа cvsusers:
oleg@localhost:~:$ stat /cvsroot/linuxcookbook
File: `/cvsroot/linuxcookbook`
Size: 144 Blocks: 0 IO Block: 4096 Каталог
Device: 306h/774d Inode: 19058 Links: 6
Access: (2775/drwxrwsr-x) Uid: ( 1000/ oleg) Gid: ( 103/cvsusers)
Access: 2008-11-06 19:58:48.000000000 +0500
Modify: 2008-11-06 19:58:49.000000000 +0500
Change: 2008-11-06 19:58:49.000000000 +0500
Для защиты от внешнего доступа файлов репозитория CVS настоятельно рекомендуется задать всем пользователям маску umask равную 007, для чего в файл ~/.bashrc каждого пользователя можно включить строку:
umask 007