Ключевые слова:cvs, (найти похожие документы)
From: Владимир В. Павлюк <vvp@dgs.ru.>
Newsgroups: email
Date: Mon, 18 Jan 2005 14:31:37 +0000 (UTC)
Subject: Настройка и использование CVS-репозитория для разработки приложений
Настройка и использование CVS-репозитория для разработки приложений
CVS (concurrent versioning system, система контроля версий) является
одним из удобнейших инструментов разработчика программных продуктов. Это
могут сказать как программисты пользующиеся этим инструментом, так и
знающие о нем понаслышке, и даже рядовые пользователи Unix-подобных
систем, поскольку именно в Unix-подобных ОС система CVS получила самое
широкое распространение.
Одним из наиболее частых заблуждений является то, что для использования
CVS необходим так называемый "сервер" CVS. На самом деле, хотя CVS может
работать и в режиме сервера ("pserver", "kserver"), наиболее часто CVS
используются с локальным репозиторием, или же репозиторием на удаленном
сервере с доступом с помощью клиента SSH. Одной из причин по которой CVS
редко используется в режиме "pserver" - это сниженная безопасность
такого репозитория, поскольку и имена пользователей и пароли передаются
в plain text с тривиальным шифрованием, которое способно обезопасить
ваши учетные данные лишь от беглого взгляда соседа-злоумышленника. Режим
"kserver" имеет более сложную систему авторизации.
Для начала работы с CVS вам необходимо создать репозиторий (repository)
- хранилище ваших будущих проектов. Нужно понимать, что то что
называется хитрым и непонятным словом "репозиторий" - ничто иное как
просто директория на локальном или удаленном компьютере.
Итак, приступим к созданию CVS-репозитория.
Настройка локального репозитория
Если вы планируете использовать этот репозиторий единолично, достаточно
будет создать в своей домашней директории папку (к примеру, пусть это
будет папка .cvs):
[vvp@vvp]$ mkdir ~/.cvs
Директория создана. Для того чтобы сделать ее репозиторием, необходимо
создать в ней субдиректорию CVSROOT:
[vvp@vvp]$ mkdir ~/.cvs/CVSROOT
Обобщая вышесказанное: в корневом каталоге каждого репозитория должна
быть директория CVSROOT которая хранит специальные служебные файлы
программы CVS.
Теперь, я думаю, вам захочется создать в вашем новом репозитории
какой-нибудь проект. Не спешите - сначала (конечно для удобства
пользования) стоит задать несколько переменных окружения:
1) CVSROOT=~/.cvs - указывает на корень репозитория;
2) CVSEDITOR=vi (ваш любимый текстовый редактор) - редактор который
будет использоваться для редактирования заметок при сохранении изменений
проекта в репозиторий.
Итак:
[vvp@vvp]$ export CVSROOT=~/.cvs
[vvp@vvp]$ export CVSEDITOR=vi
Настройка удаленного репозитория
Допустим, ваш основной репозиторий находится в домашней директории в
каталоге .cvs на машине vvp. Вы на своей машине vvp-home хотите
настроить CVS так чтобы он использовал ваш основной репозиторий.
Чтобы избежать излишней мороки с паролями я пользуюсь авторизацией с
помощью ключей. Для настройки такой авторизации вам нужно:
1) сгенерировать ключ;
2) указать этот ключ в списке авторизируемых на удаленной машине.
Последовательность действий будет такова:
[vvp@vvp-home]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vvp/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vvp/.ssh/id_rsa.
Your public key has been saved in /home/vvp/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx vvp@vvp-home.dgs.ru
Если вы уверены, что к вашему аккаунту больше никто не имеет доступа,
можно оставить passphrase пустой, что существенно упрощает жизнь.
Сгенерировав ключи, нужно один из них (публичный) поместить в файл
authorized_keys расположенном в папке .ssh вашей домашней директории на
удаленной машине. Это можно сделать множеством способов. К примеру так:
[vvp@vvp-home]$ cd ~/.ssh
[vvp@vvp-home]$ sftp vvp@vvp
Connecting to vvp...
Password:
sftp> cd .ssh
sftp> ls
.
..
id_rsa
id_rsa.pub
known_hosts
sftp> lls
authorized_keys id_rsa id_rsa.pub known_hosts
sftp> put id_rsa.pub authorized_keys
sftp> ls
.
..
authorized_keys
id_rsa
id_rsa.pub
known_hosts
sftp> quit
[vvp@vvp-home]$ ssh vvp
Если после этого удаленный хост не стал спрашивать у вас пароль, а
просто пустил вас, значит все прошло удачно, и пришло время настроить
собственно CVS. Указываем: export CVSROOT=:ext:vvp@vvp:/home/vvp/.cvs -
ext в спецификации пути к репозиторию указывает что для входа на
удаленную машину будет использована внешняя программа (в нашем случае
это будет ssh). Для указания какую именно программу необходимо
использовать служит переменная окружения CVS_RSH. Итак, export CVS_RSH=ssh.
Использование репозитория, или курс молодого бойца
Репозиторий настроен. Дело осталось за малым - создать проект. Для этого
во-первых нужно перейти в каталог который впоследствии станет вашим
рабочим каталогом. Во-вторых необходимо выполнить последовательность команд:
[vvp@vvp]$ cvs checkout -l .
cvs checkout: Updating .
Затем создаем рабочую папку проекта:
[vvp@vvp]$ mkdir hiworld
И добавляем ее в репозиторий:
[vvp@vvp]$ cvs add hiworld
Directory /home/vvp/.cvs/hiworld added to the repository
Проект готов! Вы можете добавлять в него новые файлы командой cvs add
(например: cvs add hiworld/hiworld.c). Запомните, что файлы готового
проекта НЕ добавляются в репозиторий немедленно. Почти все изменения в
готовом проекте вступают в силу после команды сохранения изменений в
репозиторий (cvs commit).
Работая с cvs не забывайте, что вы должны находиться в корневом каталоге
локального дерева исходников (в вашем "рабочем" каталоге).
Итак:
[vvp@vvp]$ pwd
/home/vvp/work
[vvp@vvp]$ ls
CVS/ hiworld/
[vvp@vvp]$ touch hiworld/hiworld.c
[vvp@vvp]$ cvs add hiworld/hiworld.c
cvs add: scheduling file `hiworld/hiworld.c' for addition
cvs add: use 'cvs commit' to add this file permanently
[vvp@vvp]$ cvs commit hiworld
Далее вам предлагается ввести заметки о изменениях внесенных в проект в
текстовом редакторе. Строки начинающиеся с CVS: будут проигнорированы.
Введя ваш комментарий и сохранив файл, выходим из редактора.
RCS file: /home/vvp/.cvs/hiworld/hiworld.c,v
done
Checking in hiworld/hiworld.c;
/home/vvp/.cvs/hiworld/hiworld.c,v <-- hiworld.c
initial revision: 1.1
done
В нашем дереве исходных кодов появился еще один файл с номером ревизии
1.1. Номер ревизии может используется для последующего отката изменений
сделанных в файле. Теперь изменим файл hiworld.c:
----------------------------
#include <stdio.h>
int main() {
printf("Hello, world.");
return 0;
}
----------------------------
Проверив, компилируется ли код и работает ли получившаяся программа так
как предполагалось, мы решаем что нас все устраивает и стоит сохранить
текущее состояние программы в репозитории:
[vvp@vvp]$ cvs commit hiworld.c (или просто, cvs commit, если мы хотим
сохранить изменения сделанные во всех файлах всех субдиректорий текущей
директории)
Вам опять будет предложено ввести заметки о сохраняемых изменениях.
Отредактировав и сохранив комментарий, выходим.
Checking in hiworld.c;
/home/vvp/.cvs/hiworld/hiworld.c,v <-- hiworld.c
new revision: 1.2; previous revision: 1.1
done
Итак, наш файл был сохранен с номером ревизии 1.2. Впоследствии можно
будет откатить любой файл проекта, или весь проект к необходимой точке
ревизии.
Мы рассмотрели создание репозитория CVS и начало работы с ним. Для более
подробного описания работы с CVS вы можете обратиться к многочисленной
документации в Интернет. В частности полное руководство по работе с CVS
находится по адресу http://alexm.here.ru/cvs-ru/html_chapter/cvs-ru_toc.html
Владимир В. Павлюк