Илья Рыженков - Управление исходными текстами. Часть 1. Краткое руководство по CVS
Исполнение команд
Общий синтаксис операций с CVS выглядит так:
> cvs [cvs-options] command [command-options-and-arguments]
ПРИМЕЧАНИЕ. Угловой скобкой в начале строки «>» я буду отмечать текст, набираемый в командной строке. Текст без угловой скобки, следующий за командой, является предполагаемым выводом.
Иными словами, после имени исполняемого модуля идут опции, общие для всех команд и определяющие функционирование системы в целом, а после имени команды – опции, определяющие поведение этой команды, и специфичные для команды аргументы. Ниже приводится список ключей для CVS.
ПРЕДУПРЕЖДЕНИЕ. Некоторые ключи имеют одинаковое наименование, но совершенно разный смысл, когда используются как ключи к CVS (cvs –key command) и как ключи к команде (cvs command –key). Будьте внимательны при использовании ключей и располагайте их в правильном месте.
Ключ Описание -d cvsroot Указать CVSROOT явно. Если не указан, CVS пытается определить CVSROOT из текущего каталога, переменной окружения «CVSROOT» или файла .cvsrc -q Показывать меньше информации во время работы (quiet). Подавляется дополнительная информация, например о сканировании дерева каталогов. -Q Показывать еще меньше информации во время работы (really quiet). Выводятся только сообщения об ошибках. -r Новые файлы, полученные из репозитория, помечаются флагом read-only. Используется для отслеживания редактирования файлов при помощи watchers/editors. -w Новые файлы, полученные из репозитория, помечаются флагом read-write (включена по умолчанию). Используется для отключения опции –r при использовании переменных окружения или .cvsrc. -l Не записывать информацию о выполненной команде в журнал (history log). Команда, тем не менее, выполняется, и все изменения файлов отслеживаются. -n Не производить никаких фактических изменений в рабочем каталоге. Полезно для проверки наличия изменений в репозитории. -t Показывать детально, что происходит во время операции. Особенно полезно для понимания работы CVS, рекомендуется использовать с ключом –n. -v Показать версию CVS. -T tmpdir Использовать tmpdir как временный каталог во время работы. -e editor Использовать editor для редактирования дополнительной информации, например при отсутствии –m у команд, требующих комментария. -f Не использовать .cvsrc (файл, в котором можно сохранить постоянно используемые настройки, в этой статье не обсуждается). -z #Сжимать данные при передаче по сети (0 – не сжимать, 9 – максимальное сжатие). -x Шифровать данные при передаче по сети (если поддерживается методом доступа). -a Авторизоваться при каждом взаимодействии с сервером (если поддерживается методом доступа). -s VAR=VAL Установить пользовательскую переменную для CVS (в этой статье не обсуждается).WINCVS. Можно использовать AdminCommand line… для выполнения команд CVS, набранных вручную.
Создание репозитория
Эксперименты проще всего производить с локальным репозиторием. Работа с удаленным CVS мало чем отличается, однако в этом случае Вам должен быть известен правильный CVSROOT. Например, администратор CVS-сервера может создать тестовый репозиторий и сообщить Вам необходимую информацию. Для работы с локальным репозиторием необходимо его проинициализировать самостоятельно. Создайте где-либо пустой каталог и выполните команду инициализации:
> cvs –d :local:c:/cvs/repository init
>
Ключ –d позволяет задать CVSROOT в командной строке. Команда init проводит первичную инициализацию репозитория. Вы может создать сколько угодно репозиториев в разных не пересекающихся каталогах и использовать их для различных категорий проектов, разных команд, как приватный и публичный и так далее.
В созданном пустом каталоге должен появиться подкаталог «CVSROOT», содержащий некоторое количество управляющих файлов. В этой статье устройство репозитория рассматриваться не будет.
WINCVS. Локальный репозиторий создается командой "CreateCreate a new repository…".
Создание проекта
Прежде чем помещать проект под управление CVS, следует тщательно продумать конфигурацию проекта, именование файлов и структуру каталогов. Особенно это важно в отношении каталогов. В связи с тем, что CVS должен хранить редакции всех, даже удалённых файлов, каталоги никогда не удаляются. Поэтому переименование каталогов и перемещение файлов могут вызвать трудности.
СОВЕТ Если используется Windows - давайте всем файлам имена в нижнем регистре.
Начните с проекта, состоящего из одного текстового файла. В пустом каталоге с именем “test” создайте файл “readme.txt” следующего содержания:
This is line number one
This is another line of source code
Will CVS automatically save my code each hour? No, but you can schedule automatic commit operation.
Теперь необходимо поместить файл в репозиторий:
cvs -d:local:c:/cvs/repository import -m “Comment string” remote/path vendor release
• Ключ -d со следующим за ним cvsroot, как обычно, задаёт репозиторий.
• Команда import указывает, что текущий каталог необходимо импортировать в репозиторий.
• Необязательный ключ -m со своим аргументом идёт после команды и относится к ней. Он указывает комментарий, который необходимо проассоциировать с данной редакцией. Если не указать комментарий в командной строке, CVS откроет редактор по умолчанию (например, notepad) и попросит вас ввести комментарий.
• Следующий параметр указывает путь относительно корня репозитория, где следует разместить файлы из каталога. Данные можно импортировать в любое место репозитория, все необходимые каталоги создадутся автоматически.
• Далее следуют две метки - поставщик (vendor) и символическое имя версии (release). Эти метки полезны, если вы импортируете исходные тексты сторонних разработчиков или свои проекты, уже имеющие определенную историю и нумерацию версий.
Выполнять эту команду следует из корневого каталога проекта, в этом примере - из каталога “test”.
В нашем случае эта команда может выглядеть так:
› cvs -d:local:c:/cvs/repository import -m “Initial import of the project” test myself initial
N test/readme.txt
No conflicts created by this import
›
Вывод команды означает, что в репозитории был создан файл для хранения редакций readme.txt в каталоге test, и не произошло никаких неприятностей в процессе работы.
WINCVS Выберите пункт меню "CreateImport module…" Затем выберите каталог, который вы хотите импортировать в репозиторий. Далее появится список типов файлов, обнаруженных в каталоге. Вы можете выбрать, какие из них необходимо импортировать, а какие нет.
Теперь, если краешком глаза заглянуть в репозиторий, можно обнаружить там новый каталог с именем test, внутри которого CVS расположил свои служебные файлы и файлы проекта с информацией о редакциях - проект создан и находится в репозитории. Однако локальный каталог до сих пор не имеет никакого отношения к CVS - файлы всего лишь «скопированы» в репозиторий. Теперь нужно создать структуру, которая бы хранила информацию о связи с репозиторием локально.
ПРЕДУПРЕЖДЕНИЕ Импорт файлов в репозиторий не создаёт локальной структуры с информацией о связи с репозиторием
Чтобы создать связь между репозиторием и рабочим каталогом, необходимо выполнить другую операцию - checkout. Но предварительно нужно… удалить каталог, из которого импортировались файлы. Он больше не нужен, поскольку вся необходимая информация содержится в репозитории. Возможно, неплохой мыслью будет резервное копирование проекта, но в данном случае этого можно не делать. Итак, удалите каталог “test”, из которого производился импорт. Теперь можно произвести операцию получения рабочей копии из репозитория.
Получение рабочей копии
Скорее всего, у Вас есть некоторый каталог, где и хранятся разнообразные проекты. Это хороший кандидат для использования в качестве основного каталога для получения рабочих копий проектов из CVS. Предположим для простоты, что это c:projects
WINCVS Хорошей мыслью может быть установка этого каталога в качестве корневого для дерева каталогов. Используйте "ViewBrowse LocationChange…", чтобы установить его. Это избавит Вас от лишней информации во время работы с WinCVS