CVS and TkCVS workaround.

Введение

Данный документ представляет собой сведенный заметки по особенностям работы с cvs и в частности с TkCVS. Он не коей мере не может быть использован в качестве пособия по обучению этим продуктам и служит только для справочных целей. В тексте вы можете встретить и скорее встретите немало неточностей и неверно итерпретируемых терминов. Оставьте это на совести автора.
В заметках использовались версии cvs v1.9.26 и TkCVS v6.0. В процессе написания использовалась документация поставляемая с cvs и TkCVS, и материалы, найденые в Internet.

Инициализация CVS репозитария

Прежде всего, для начала работы с cvs, необходимо создать репозитарий, используемы cvs для хранения различных версий файлов. Место нахождения репозитария cvs может брать из командной строки так и из переменной окружения $CVSROOT.

[fa@horse ~] cvs init

[fa@horse .CVS]$ ls -R 
CVSROOT

./CVSROOT:
checkoutlist    cvswrappers,v   loginfo,v       rcsinfo         verifymsg,v
checkoutlist,v  editinfo        modules         rcsinfo,v
commitinfo      editinfo,v      modules,v       taginfo
commitinfo,v    history         notify          taginfo,v
cvswrappers     loginfo         notify,v        verifymsg
При этом автоматиски включается введение истории history. Если в этом нет необходимости, то после cvs init следует удалить файл history.

Занесение проекта в репозитарий

Предположим что необходимо внести проект находящийся в /some/project в репозитарий как $CVSROOT/myname/Project. Данная операция осуществялется следующим образом, при условии что файлы относящиеся к проекту находятся в каталоге /some/project:
[fa@horse ~] cd /some/project
[fa@horse project]  cvs import -m "Imported sources"  myname/Project Fa start
где yoyo - тэг распространителя (vendor tag), start - "release tag"
После чего, можно проверить, переименовав исходный каталог проекта и попытаться восстановить его из репозитария
[fa@horse project] cd ..
[fa@horse some] mv project poject.orig
[fa@horse some] cvs checkout myname/Project
[fa@horse some] diff -r project.orig myname/Project
[fa@horse some] rm -r project.orig
При работе с проектом "с нуля" достаточно занести в репозитарий стартовый каталог аналогично описанному выше и добавлять остальный файлы по мере необходимости. Переход от других revision control system не рассматривается.

Модули

Модули используются для облегчения доступа к тем или иным файлам. Описание модулей хранится в файле ${CVSROOT}/CVSROOT/modules. При внесениии каких либо правок в modulesнеобходимо получиться этот файл из репозитария:
[fa@horse ~] cvs checkout CVSROOT/modules
[fa@horse ~] cd CVSROOT
Формат записи:
key -a aliases...
key [options] directory
key [options] directory files...

где key - ключ обращения к модулю - название модуля, directory - подкаталог относительно $CVSROOT, в котором находятся файл/файлы относящиеся к данному модулю.

После внесения изменений в modules, необходимо занести его обратно в репозитарий исполнив
cvs commit -m "Some changes in the modules.
cd ..
cvs release -d CVSROOT
Использование -d задает удаление об'ектов после операции release.

Об'екты, не управляемые cvs.

При исполнении команд update release import cvs игрорирует файлы имена которых:

TkCVS: введение.

TkCVS: расширенные записи в modules.

TkCVS при работе использует в файле modules свои комментарии для определения каталогов и описания модулей. Эти данные совершенно прозрачны для собственно cvs.Формат описания следющий:

Имена каталогов:
#D <TAB>directory <TAB> Directory name
то есть:
#D <TAB> proj401 <TAB> Advanced Chocolate Seeking Project.
(между полями вставяется одиночный символ Tab а не слово <TAB> :)

Имена модулей:
#M <TAB> module code <TAB> Module description
Имена модулей должны быть непосредственно перед строкой описания модулей или их псевдонимов(alias) и в месте после описания имени католога #D, в котором находятся эти модули. те.
#M <TAB> wrapper <TAB> Chocolate wrapper detector.
wrapper proj401/wrapper

Рекомендуется добавить сразу в файл modules следующие строки для работы с TkCVS ( и собственно с cvs ).

#D      CVSROOT The Complete CVS Administration Directory

#M      modules The modules database
modules         CVSROOT modules
#M      loginfo post-commit command file
loginfo         CVSROOT loginfo
#M      commitinfo      pre-commit command file
commitinfo      CVSROOT commitinfo
#M      rcsinfo RCS log template
rcsinfo         CVSROOT rcsinfo
#M      editinfo        CVS log template
editinfo        CVSROOT editinfo

TkCVS: добавление модулей

Модули лучше размещать по подкаталогам в $CVROOT. Это должно облегчить управление и доступ к родственным проектам. В одном подкаталоге можно разместить несколько проектов, об'единенных общей направленностью. В общем случае, репозитарий представляет собой древовидную структуру хранения данных. С помощью TkCVS создаются записи в modules о каталогах, но не сами катологи. Собственно каталоги cоздаются вручную внутри $CVSROOT.

File -> Create Dir

Поля ввода:
New directory Location - путь к создаваемому каталогу, задается относительно $CVSROOT - Webs
New directory Name - то как каталог будет представлен пользователю в TkCVS - Web related files.
В результате получаем в modules запись:
#D Webs Web related files.
Только не забудьте создать собственно каталог !:)

Следующим шагом будет импортирование в репозитарий новго модуля и соответствующих ему файлов. Предволожим это будут файлы составляющие home page. Перед импортироавнием рекомендуется создать в подкаталогах .cvsignore для исключения из обработки бинарных файлов, таких как картинки и компрессованные архивы. Псле чего перейдя в ~/public_html выполним import.

File->Import

Поля ввода:
Module Directory - каталог в котором будут находится файлы модуля. Мы его размещаем в $CVSROOT/Webs - Webs-Fa_Home_Page.
Modul Code - имя модуля под которым он будет записан в modules - public_html
Version Number - номер версии. Поскольку мы импортируем модуль впервые то укажем его 1.1 (начальный номер по умолчанию для cvs).
Module Name - описание модуля, которое используется для отображении в TkCVS.

Теперь можно восстановить данное дерево в другом месте. Только необходимо учесть, что файлы описанные в .cvsignore соответсвенно не попали в репозитарий.