CVS

Спецсеминар "Разработка свободного ПО": http://uucode.com/oss2004/. 4-я лекция, 2 октября.

Введение в cvs

CVS -- Concurrent Versions System, Система Управления Параллельными Версиями <http://cvshome.org/>

Перевод документации на <http://cvs.ru/>. А также статьи. Например,

Центральный сервер (репозиторий) и куча рабочих копий на машинах разработчиков. Всё это как-то взаимодействует.

Польза:

Базовые команды

Вначале изучать сложно, затем -- просто. (Анекдот: "... вначале сам не понимал, а потом привык.") Не рекомендую графические клиенты. Хотя WinCVS хорош.

Первоначальная настройка достаточно сложна. Пока будем считать, что сервер есть, и на нём уже что-то есть. Вытаскивание проекта хорошо описано на sourceforge.

На странице проекта есть ссылки "CVS Repository" и "Browse CVS". Вторая их них -- специальная версия программы WebCVS. С помощью WebCVS можно посмотреть список проектов в репозитории. По ссылке "CVS Repository" -- объяснения, как загрузить проект к себе. Что-то типа:

$ cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/getfo login
$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/getfo \
  co texml

В следующий раз не надо говорить "login". А находясь в папке, не нужно указывать ключ "-d".

Создаётся куча служебных папок "CVS". В них находятся файлы, описывающие репозиторий.

Обновление рабочей версии:

$ cvs update

Обычно с ключом "-d" (создавать новые директории):

$ cvs update -d

Обновление некоторых файлов:

$ cvs update file1.html file2.html

Немного про синтаксис команды cvs:

$ cvs global_flags command command_flags files ...

Ещё один полезный "update" (выдаёт, что надо сделать):

$ cvs -q -n update // в рамочку и на стенку
U -- update
D -- delete
M -- modified
C -- conflict
etc

Вытаскивание нужной версии:

$ cvs update -d -D 2004-09-17 // cvs запоминает дату
$ cvs update -d -r release10  // cvs запоминает метку
$ cvs update -d -A            // сбросить всё и обновиться

Это всё был анонимный cvs, и репозиторий обновлять было нельзя. Допустим, брали рабочую копию как член проекта и можем писать.

$ cvs commit

Попросит ввсети информацию об изменениях. Что писать? Хороший вопрос. Один из вариантов -- то, что автоматически пойдёт в ChangeLog или в отчёт начальству.

Разница кода в рабочей версии и в репозитории:

$ cvs diff

Когда обновлять? Чем чаще, тем лучше. При этом код из cvs должен собираться без ошибок. (В некоторых фирмах: кто поломал ночную сборку, тот следит за результатами по утрам.)

Добавлять файл:

$ cvs add foo.c
$ cvs add -kb bar.jpg
$ cvs commit foo.c var.jpg

Допустим, что два человека правили один и тот же файл. Мы говорим "cvs commit", а cvs отвечает, что файл на сервере более новый.

Тогда мы делаем "cvs update" этого файла и смотрим итог. В большинстве случаев оба изменения автоматически сливаются. (Это -- магия, ждём доклад про неё.)

Если автоматически не получается, то делается всё, что можно, в конфликты исправляются руками.

Ограничения:

Более сложные возможности

Создание репозитория описано в документации.

Добавление проекта в репозиторий тоже описано в документации. Имейте в виду, что сделать import мало, надо потом ещё сделать checkout.

Неправильно способ создания.

Какие репозитории бывают (CVSROOT):

В случае 'ext' обычно используется ssh и ключи.

Другие системы

Subversion <http://subversion.tigris.org> -- наследник cvs

Source Safe от Microsoft

И вообще, много их.

Отвлечения

Яндекс учреждает научные стипендии <http://company.yandex.ru/news/2004/0922/> Приём заявок до конца октября, результаты в ноябре. Кто получит стипендию, тот получит и зачёт.

http://www.linux.org.ru/view-message.jsp?msgid=665958&page=1 "С выходом Gnome 2.8 мы начинаем работу над Gnome 2.10... До сих пор не реализовано много вещей, и если вы хотите помочь нам, то вот список тех вещей, которые вы могли бы сделать. Возможно, наиболее важным являются баги Nautilus (около 1300), и поэтому лидер проекта просит community помочь и исправить столько, сколько сможете."