Администрирование CVS


Автор: Инга Захарова, arlantine@lnx.ru
Опубликовано: 14.05.2002
Оригинал: http://www.softerra.ru/freeos/17788/


Перевод статьи Дженнифер Весперман (Jennifer Vesperman) CVS Administration

CVS – или Concurrent Versioning System (система параллельного контроля версий) – инструмент для сохранения работы пользователей путем ведения истории изменений. Эта система позволяет восстановить предыдущие версии файлов, регистрирует, кто и какие изменения производит и предотвращает наложение одного изменения на другое, если они производятся одновременно.

Файлы, которые обслуживает CVS, должны храниться в модулях – директориях, содержащих связанные между собой файлы и поддиректории. Модуль может быть маленьким – размером с отдельную директорию, содержащую единственный файл, а может быть большим и занимать все возможное дисковое пространство.

Сопутствующая статья

Эта статья является дополнением к статье «Введение в CVS», в которой рассматривается использование архива CVS. В данной статье рассматривается построение и обслуживание архива и обсуждаются некоторые наиболее распространенные проблемы, с которыми сталкиваются CVS-администраторы.

Создание архива

Архив должен находится на машине, где достаточно свободного дискового пространства для того, чтобы хранить все ваши файлы и данные обо всех предполагаемых изменениях. Сделав приблизительные расчеты, поместите архив в партицию, в которой свободного места примерно в три раза больше, чем ожидаемый размер вашего модуля. Затем, согласно «правилу Скотти», удвойте ваши расчеты – проект будет развиваться. Если вы намереваетесь хранить бинарные файлы – увеличьте в 10 раз. После первого проекта вы поймете, сколько свободного пространства оставлять.

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

Создайте корневую директорию архива . Чаще всего архивы хранятся в /home/cvsroot или /usr/local/cvsroot. Используйте cvs init, чтобы настроить директорию в качестве CVS архива.

cvs -d /home/cvsroot init

В Debian Linux есть скрипт cvs-makerepos, который создаст архив на основе предыдущих скриптов настройки Debian. Для получения дополнительной информации ознакомьтесь с инструкцией по cvs-makerepos ( man cvs-makerepos) и инструкцией по cvsconfig (man cvsconfig) для автоматизированных систем для настройки CVS-архива в Debian.

Импортирование нового модуля

Прежде чем загружать свой проект в CVS, продумайте его структуру. Перемещение или переименование файлов и директорий может повредить записи обо всех изменениях в файлах CVS. Удаление директории может стоить вам записей обо всех ее файлах и поддиректорий. По этой причине CVS не имеет возможностей для удаления или переименования файлов и директорий, равно как и удаления директорий.

Создайте исходную структуру ваших директорий – даже если пока это всего одна директория. Добавьте любые желаемые исходные файлы. Запустите в корневой директории вашего проекта команду cvs -d путь_к_архиву_cvs import имя_модуля vendortag releasetag.

В большинстве случаев вам не обязательно знать о vendor tags и release tags. CVS требует их наличие, но вы можете просто использовать имя модуля в качестве vendor tag и название текущей версии в качестве release tag.

/home/jenn$ cd example
/home/jenn/example$ cvs -d /home/cvsroot import example example_project ver_0-1

Использование тэгов

Тэги присваивают символическое имя измененной версии файла или последовательности файлов. cvs tag ставит метки на все архивные версии всех файлов в текущей рабочей директории и ее поддиректориях.

Команда cvs rtag основана на временной метке. Она присваивает символическое имя той версии файла или директории, которая является ближайшей из более старых, независимо от рабочей директории.

Учтите, что CVS не допускает наличия в тэгах символа '.'.

cvs tag имя_тэга имя_файла
cvs tag имя_тэга

(Отмечает архивные версии всех файлов текущей рабочей директории.)

cvs tag -c имя_тэга

(Прерывается, если архивная копия отличается от рабочей копии.)

Пример:

cvs/example$ cvs tag release-1-0 src/sample.c
cvs/example/src$ cvs tag release-1-0
cvs/example/src$ cvs tag -c release-1-0

Чтобы восстановить отмеченную версию используйте флажок для извлечения или обновления. Если вы извлекаете или обновляете файлы в вашей текущей рабочей директории, то версия с меткой будет записана поверх существующих файлов.

cvs checkout -r имя_тэга
cvs update -r имя_тэга

Пример:

cvs$ mkdir example-rel-1.0
cvs/example-rel-1.0$ cvs checkout -r release-1-0

или

cvs/example$ cvs update -r release-1-0

Разработка ответвлений

Если вам необходимо исправить ошибку в предыдущей версии вашего кода без изменения его текущей версии, или изменить настройки на резервных серверах без внесения каких-либо изменений в настройки производственных серверов, то вы должны создать несколько ответвлений модулей. Изменения в ответвлениях в дальнейшем могут объединяться.

Чтобы создать новую ветвь:

cvs tag -b тэг_ветви

Пример:

cvs/example$ cvs tag -b release-1-0-patches

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

cvs checkout -r тэг_ветви
cvs update -r тэг_ветви

Пример:

cvs/example-rel-1.0$ cvs checkout -r release-1-0-patches
cvs/example$ cvs update -r release-1-0-patches

Ответвления могут объединяться снова с главной веткой при использовании системы разрешения конфликтов, осуществляемой cvs update и cvs commit.

cvs checkout имя_имодуля
cvs update -j тэг_ветви

Пример:

/tmp/example$ cvs checkout example
/tmp/example$ cvs update -j release-1-0-patches

Или отдельной командой:

cvs checkout -j тэг_ветви имя_модуля

Пример:

/tmp/example$ cvs checkout -j release-1-0-patches example

После разрешения всех конфликтов система сообщит об этом, после чего примените cvs commit.

Удаление директорий

Директории не могут быть удалены из архива посредством команд CVS. Если директория больше не нужна, очистите директорию с помощью cvs remove и используйте cvs update -P и cvs checkout -P при восстановлении рабочей копии. Опция -P обеспечит, что пустые директории не будут восстанавливаться.

При необходимости вы можете удалить директорию, применив в архиве команду rmdir. Прежде попробуйте сделать это на копии архива и проверьте, что ничего не испортили: если архивная директория имеет поддиректорию 'Attic', то вы утратите хранившиеся в ней архивные копии.

Если вы удаляете директорию из архива, то все ваши пользователи должны удалить оттуда существующие рабочие копии и извлечь из модуля свежие копии.

Наблюдение за файлами и блокирование

В отличие от многих систем контроля версий в CVS нет блокирования файлов – она не препятствует одновременному редактированию файлов. Тем не менее, вы можете установить наблюдение за файлами, и тогда CVS будет сообщать наблюдателям, когда файл редактируется. Если за файлами установлено наблюдение, то, чтобы разрешить редактирование файла, разработчикам придется использовать cvs edit и cvs unedit. Ненаблюдаемые файлы можно редактировать без какого-либо уведомления CVS.

Чтобы настроить наблюдение за файлами, используйте:

cvs watch on (файлы)
cvs watch off (файлы)

Чтобы установить себя в качестве наблюдателя, используйте:

cvs watch add (файлы)
cvs watch remove (файлы)

или

cvs watch add -a edit|unedit|commit|all (файлы)
cvs watch remove -a edit|unedit|commit|all (файлы)

Специальный файл CVS notify определяет, что происходит, когда изменяется наблюдаемый файл. По умолчанию он настроен на отправку письма пользователю на CVS-сервере. Если у ваших пользователей есть другие адреса, настройте соответственно файл «users» в директории архива CVSROOT. Данные должны вводиться в формате user:email, по одной записи в строке.

jenn:jenn@cvs.example.com.au

Безопасность CVS

Удаленные архивы

Если архив находится на локальной машине, то с доступом и защитой все более-менее понятно. Вы можете установить переменную среды $CVSROOT в корневую директорию CVS-архива, или вызвать checkout с опцией -d <directory>.

Если архив находится на удаленной машине, необходимо указать CVS на какой именно машине он находится, и каким способом к ней может быть получен доступ. Существует несколько способов, но для простоты и безопасности я предпочитаю использовать SSH. Порядок определения удаленного $CVSROOT следующий: :метод:[[имя_пользователя]:[пароль]@]имя_хоста[:[порт]]:/путь/к/архиву; например, :ext:jenn@cvs.example.com.au:/usr/local/cvsroot

(Кстати, моя info cvs несколько не согласна с тем, что делает моя копия CVS. Я привела здесь сочетание, которое работает в моем случае – двоеточие между именем хоста и путем. Используйте сочетание, которое работает в вашей системе).

Для использования SSH мы применяем метод :ext:. В этом методе для соединения с CVS-сервером используется внешний rsh для CVS или совместимая с rsh программа. Чтобы указать CVS использовать SSH вместо rsh, установите переменную среды $CVS_RSH равной SSH. Обеспечьте, чтобы SSH был установлен на сервере и на всех клиентах, чтобы были генерированы SSH-ключи и у пользователей на всех машинах были имена и пароли. Если пользователи те же, часть имя_пользователя@ в строке CVSROOT не нужна. Если используется стандартный порт SSH, порт указывать не нужно.

cvs -d :ext:cvs.example.com.au:/usr/local/cvsroot checkout sample

Права доступа

Все файлы в архиве предназначены только для чтения. Права доступа для этих файлов не должны изменяться. Для контроля доступа используйте права доступа к директориям. Большинство администраторов создают группу для тех, кто должен иметь доступ к модулю, и устанавливают для этой группы право записи в директорию.

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

Машины разработчиков

Безопасность проекта включает в себя безопасность архива и сохранность всех извлеченных копий – как правило на машинах ваших разработчиков. Недостаточно просто обеспечить сохранность архива, тщательное шифрование всех пересылаемых данных, если кто-нибудь может спокойно зайти по окончании рабочего дня в офис вашего разработчика и записать CD с вашим кодом. Осуществляйте повседневную физическую и сетевую защиту машин разработчиков, рабочих и демонстрационных копий и всех прочих мест, куда поступают извлекаемый код.

Заключительные слова

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

Для дополнительного чтения

Для пользователей Debian Linux:

Дженнифер Весперман (Jennifer Vesperman) нравится думать, что она родилась с силиконовой пластиной, прикрепленной к позвоночнику, но не смогла заставить родителей признаться. Она вносит свой вклад в Open Source большей частью как пользователь и адвокат. Jenn является в настоящее время координатором Linuxchix.org.



Почитать на ту же тему на сайте «Софтерра»:



Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)