Оглавление

CVS

Настройка сервера | Проверка CVS | SSH туннель | Использование CVS

CVS - (Concurrent Versions System, "Система Конкурирующих Версий" ) — программное решение из класса "систем управления версиями" (version control system). Содержит историю изменений определенного набора фалов, являющихся как правило исходниками какого-то програмного проекта. Позволяет вести совместную работу над проектом, группе людей.

Настройка CVS сервера

Подготовка CVS

Для начала нужно решить, где будет лежать основное хранилище и создать для него корневую директорию. Например /usr/local/cvs:

# mkdir -p /usr/local/cvs
# setenv CVSROOT /usr/local/cvs      # Установить для переменной CVSROOT расположение корня (local)
# cvs init                           # Создать все внутренние конфиги CVS
# cd /root
# cvs checkout CVSROOT               # Оформить рабочее дерево каталогов
# cd CVSROOT
edit config ( fine as it is)
# cvs commit config
cat >> writers                       # Создать файл writers, содержащий пользователей с правами на запись/изменение
(опционально, файл readers)
colin
^D                                   # Используя Ctrl+D, выйти из режимама редактирования
# cvs add writers                    # Добавить разработчиков в репозитарий 
# cvs edit checkoutlist
# cat >> checkoutlist
writers
^D                                   # Используя Ctrl+D, выйти из режимама редактирования
# cvs commit                         # Передать все сделанные изменения

Есть два способа разграничить права на чтение и запись репозитария. Включающий способ означает, что пользователи, имеющие права на чтение, явно указываются в файле readers. Исключающий способ означает, что права на запись, имеют только пользователи перечисленные в файле writers, остальные только на чтение.
Есть три способа получить доступ к хранилищу. Два первых не нуждаются в каком-либо дополнительном изменении конфигурации.

Сетевые настройки с помощью inetd

CVS можно запустить локально, только если нет надобности в сетевом доступе. Для удаленного доступа, демон inetd, файл /etc/inetd.conf (/etc/xinetd.d/cvs в SuSE), запускает pserver:

cvspserver	stream  tcp  nowait  cvs  /usr/bin/cvs	cvs \
--allow-root=/usr/local/cvs pserver

Неплохой идеей будет заблокировать порт CVS от прямого доступа из внешнего мира с помощью firewall и использовать SSH туннель.

Раздельная авторизация

Иногда может понадобиться, завести не локальных пользователей. Для этого просто добавте файл passwd, содержащий имена пользователей и пароли в зашифрованном виде, в директорию CVSROOT. Сделать это можно, например с помощью утилиты веб-сервера Apache, htpasswd.
Данный файл можно редактировать напрямую, в директории CVSROOT. Для получения справки, используйте, htpasswd --help

# htpasswd -cb passwd user1 password1  # -c, создать файл
# htpasswd -b passwd user2 password2

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

# cat passwd
user1:xsFjhU22u8Fuo:cvs
user2:vnefJOsnnvToM:cvs

Проверка

Попробуйте зайти с именем существующего пользователя:

# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login
Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs
CVS password:

Переменная CVSROOT

Это переменная окружения, использующаяся для назначения, места хранения репозитария. Для локального использования, она может быть установлена в директории репозитария. Для сетевого доступа, должен быть определен транспортный протокол. Установите переменную CVSROOT, командой, setenv CVSROOT строка (для оболочек csh и tcsh), или export CVSROOT=string(для оболочек sh или bash).

# setenv CVSROOT :pserver:<username>@<host>:/cvsdirectory
For example:
# setenv CVSROOT /usr/local/cvs                               # Только для локального использования
# setenv CVSROOT :local:/usr/local/cvs                        # То-же, что и выше
# setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs           # Прямой доступ по SSH
# setenv CVS_RSH ssh                                          # Для ext доступа
# setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs   # Для сети, через pserver

После авторизации в системе, можно импортировать новый проект:
Перейдите в корневую директорию проекта

cvs import <module name> <vendor tag> <initial tag>
cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany START

Где, MyProject, имя вашего нового проекта в репозитарии (потом используется для проверки). CVS импортирует текущее содержимое директории в проект.

Проверка:

# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject
или
# setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs
# cvs checkout MyProject

SSH туннель для CVS

Нам понадобится 2 оболочки. Из первой мы подключимся к CVS серверу с помощью SSH и перенаправлением портов. Из второй оболочки будем подключаться к CVS, как будто он запущен на локальной машине.


Оболочка 1:

# ssh -L2401:localhost:2401 colin@cvs_server   # Прямое подключение к CVS серверу, или:
# ssh -L2401:cvs_server:2401 colin@gateway     # Используйте шлюз

Оболочка 2:

# setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs
# cvs login
Logging in to :pserver:colin@localhost:2401/usr/local/cvs
CVS password:
# cvs checkout MyProject/src

Использование команд CVS

Import

Команда Import, используется для добавления целой директории, вызывается из директории, которую нужно импортировать. К примеру, директория /devel/ содержит файлы и поддиректории для импорта. Директория в CVS, будет "myapp".

# cvs import [options] directory-name vendor-tag release-tag
# cd /devel                          # Войти в директорию проекта для импорта
# cvs import myapp Company R1_0      # Release tag может быть любым словом

После добавления новой директории "/devel/tools/", ее так-же можно импортировать.

# cd /devel/tools
# cvs import myapp/tools Company R1_0

Checkout update add commit

# cvs co myapp/tools                 # Проверка только директории tools
# cvs co -r R1_1 myapp               # Проверит "myapp", релиз R1_1 
# cvs -q -d update -P                # Типичное обновление CVS
# cvs update -A                      # Сбросить "sticky tag"
# cvs add newfile                    # Добавить файл
# cvs add -kb newfile                # Добавить бинарный файл
# cvs commit file1 file2             # Закоммитить только 2 файла
# cvs commit -m "message"            # Закоммитить все изменения, сделанные в сообщении

Создание патча

Создавать патч, предпочтительней, из рабочей директории проекта или из исходников.

# cd /devel/project
# diff -Naur olddir newdir > patchfile # Создать патч из директории или файла
# diff -Naur oldfile newfile > patchfile

Применение патча

Иногда может понадобится отделить уровни директорий для патча, в зависимости от того, как он был создан. В случае затруднений, можно просто посмотреть первую строку в файле патча и попробовать варианты:-p0, -p1 или -p2.

# cd /devel/project
# patch --dry-run -p0 < patchfile    # Проверить патч, не применяя его
# patch -p0 < patchfile
# patch -p1 < patchfile              # Отделить один уровень от пути

Оглавление