Алексей Махоткин

домашняя страница

CVS — Система Управления Параллельными Версиями

Go to the first, previous, next, last section, table of contents.


Начинаем проект под CVS

Так как переименование файлов и перемещение их между каталогами слегка неудобно, первое, что вам следует сделать, когда вы начинаете новый проект – продумать организацию файлов. Собственно, перемещать и переименовывать файлы можно, но это, во-первых, увеличивает возможность недопонимания, а во-вторых, у CVS есть некоторые неполадки, например, при переименовании каталогов. See section Перемещение и переименование файлов.

Дальнейшие действия зависят от конкретной ситуации.

Помещение файлов в репозиторий

Первым шагом будет создание файлов в репозитории. Это может быть сделано несколькими различными способами.

Создание дерева каталогов из нескольких файлов

Когда вы начнете использовать CVS, вы, скорее всего, уже имеете несколько проектов, которые можно поместить под контроль CVS. В этих случаях самым простым методом будет использование команды import. Самым простым объяснением, вероятно, будет привести пример. Если файлы, которые вы хотите поместить под CVS, находятся в `wdir, а вы хотите, чтобы они появились в репозитории в каталоге `$CVSROOT/yoyodyne/rdir, вы можете сказать:

$ cd wdir
$ cvs import -m “Imported sources” yoyodyne/rdir yoyo start

Если вы не укажете журнальное сообщение с помощью ключа командной строки `-m’, то CVS запустит редактор, в котором можно будет набрать это сообщение. Строка `yoyo’ – это тэг производителя, а `start’ – это тэг релиза. В данном контексте они могут не иметь назначения, но CVS требует их присутствия. See section Слежение за чужими исходными текстами, за дальнейшей информацией.

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

$ cd ..
$ mv dir dir.orig
$ cvs checkout yoyodyne/dir       # объяснение следует
$ diff -r dir.orig yoyodyne/dir
$ rm -r dir.orig

Было бы неплохо удалить изначальные файлы, чтобы случайно не начать редактировать их в dir без использования CVS. Конечно же, перед удалением хорошо было бы убедиться, что у вас есть резервная копия исходных текстов.

Команда checkout получает в качестве аргумента имя модуля (как в предыдущих примерах) или имя каталога относительно $CVSROOT, как в вышеприведенном примере.

Хорошо было бы проверить, что права доступа на созданные CVS каталоги правильны, и что эти каталоги принадлежат должным группам. See section Права доступа к файлам.

Если какие-то из файлов, которые нужно импортировать, являются бинарными, вам потребуется использовать обертки, чтобы указать, какие именно. See section Файл `cvswrappers’.

Создание файлов из других систем контроля версий

Если у вас есть проект, который обслуживается другой системой контроля версий, например, RCS, вы можете захотеть поместить эти файлы под управление CVS и сохранить историю изменения этих файлов.

Из RCS
Если вы использовали RCS, найдите все RCS-файлы, обычно файлу `foo.c’ будет соответствовать файл `RCS/foo.c,v’ (этот файл может также находиться в другом месте, обратитесь к документации на RCS. Затем создайте соответствующие каталоги в CVS, если они еще не существуют. Затем скопируйте файл в соответствующие каталоги в репозитории (имя в репозитории должно совпадать с именем исходного файла с добавленным `,v’; файлы находятся прямо в соответствующем каталоге репозитория, а не в подкаталоге `RCS/’. Это — один из редких случаев, когда желателен прямой доступ к репозиторию, без использования команд CVS. Теперь вы можете извлечь новый рабочий каталог. RCS-файл не должен быть заблокирован, когда вы перемещаете его под управление CVS, иначе у CVS будут проблемы при работе с этим файлом.
Из другой системы контроля версий
Многие системы контроля версий способны экспортировать RCS-файлы в стандартном формате. Если ваша система умеет так делать, экспортируйте RCS-файлы и следуйте вышеприведенным инструкциям. Если это не так, вероятно, лучшим выходом будет написать скрипт, который извлекает каждую ревизию файла, используя интерфейс командной строки старой системы, а затем фиксирующий эти ревизии в CVS. Скрипт `sccs2rcs’, упомянутый ниже, является хорошим примером.
Из SCCS
В каталоге `contrib/’ среди исходных текстов CVS есть скрипт `sccs2rcs’, конвертирующий файлы SCCS в файлы RCS. Замечание: вы должны выполнить этот скрипт на машине, на которой установлен как SCCS, так и RCS, и этот скрипт не поддерживается.
Из PVCS
В каталоге `contrib/’ среди исходных текстов CVS есть скрипт `pvcs_to_rcs’, конвертирующий архивы PVCS в файлы RCS. Вы должны выполнить этот скрипт на машине, на которой установлены как PVCS, так и RCS, и как и все прочее в каталоге `contrib/’, этот скрипт не поддерживается. Детали описаны в комментариях к скрипту.

Создание дерева каталогов с нуля

Для нового проекта самым простым способом, вероятно, будет создать пустую структуру каталогов, например:

$ mkdir tc
$ mkdir tc/man
$ mkdir tc/testing

Затем используйте команду import, чтобы создать соответствующую (пустую) структуру каталогов внутри репозитория:

$ cd tc
$ cvs import -m “Created directory structure” yoyodyne/dir yoyo start

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

Убедитесь, что права доступа, которые CVS дает новым каталогам в `$CVSROOT’, правильны.

Определение модуля

Следующим шагом будет определение модуля в файле `modules’. Это необязательно, но модули удобны для группирования связанных файлов и каталогов.

В простых случаях нижеследующих шагов достаточно для определения модуля.

  1. извлеките рабочую копию файла `modules’:
    $ cvs checkout CVSROOT/modules
    $ cd CVSROOT
    
  2. отредактируйте этот файл, вставив в него строку, определяющую модуль. См. See section Административные файлы. Полное описание файла `modules’ можно найти в See section Файл `modules’. Например, для описания модуля `tc’ можно использовать такую строку:
    tc   yoyodyne/tc
    
  3. зафиксируйте ваши изменения в файле `modules’
    $ cvs commit -m “Added the tc module.” modules
    
  4. Освободите модуль CVSROOT.
    $ cd ..
    $ cvs release -d CVSROOT
    


Go to the first, previous, next, last section, table of contents.

Comments