CVS.Система управления параллельными версиями

         

Как хранить двоичные файлы


При хранении двоичных файлов встает два вопроса. Первый: CVS по умолчанию преобразует коды конца строк между канонической формой, в которой они хранятся в репозитории (только символ новой строки) и формой, соответствующей операционной системе клиента (например, возврат каретки, за которым следует перевод строки под Windows NT).

Второй вопрос -- в двоичном файле могут оказаться данные, похожие на ключевое слово (see section Подстановка ключевых слов), так что эта подстановка должна быть выключена.

Ключ командной строки `-kb', доступный при использовании некоторых команд CVS, позволяет убедиться, что ни преобразование концов строки, ни подстановка ключевых слов не производятся.

Вот пример создания нового файла с использование флага `-kb': $ echo '$Id$' > kotest $ cvs add -kb -m"A test file" kotest $ cvs ci -m"Первое фиксирование; файл содержит ключевое слово" kotest

Если файл случайно будет добавлен без `-kb', можно использовать команду cvs admin для восстановления. Например, $ echo '$Id$' > kotest $ cvs add -m"A test file" kotest $ cvs commit -m"Первое фиксирование; содержит ключевое слово" kotest $ cvs admin -kb kotest $ cvs update -A kotest # Для не-UNIX систем: # Скопировать откуда-нибудь хорошую копию файла $ cvs commit -m "Сделать файл двоичным" kotest

Когда вы извлечете файл `kotest', он не станет двоичным, потому что вы не зафиксировали его как двоичный. Команда cvs admin -kb устанавливает метод подстановки ключевых слов по умолчанию для этого файла, но не изменяет рабочую копию файла, которая у вас есть. Если вам нужно справиться с символами конца строки (при использовании CVS на не-UNIX системах), вам требуется зафиксировать новую копию файла, как показано выше в команде cvs commit. Под UNIX достаточно выполнить cvs update -A.

Однако, используя cvs admin -k для изменения режима подстановки ключевых слов, знайте, что этот режим не подчиняется контролю версий. Это означает, что если, скажем, в старых версиях пакета какой-то файл был текстовым, а затем в новых версиях появился двоичный файл с тем же именем, то CVS не обеспечивает способа извлечь файл в двоичном или текстовом режиме в зависимости от версии пакета, которую вы извлекаете. Для обхода этой проблемы хорошего решения не существует.

Вы можете установить значения по умолчанию, которые используют команды cvs add и cvs import, для выяснения, является ли файл текстовым или двоичным, основываясь на его имени. Например, можно гарантировать, что файлы, чьи имена заканчиваются на `.exe' являются двоичными. See section Файл `cvswrappers'. В настоящий момент нет способа для определения, является ли файл текстовым или двоичным, в зависимости от его содержимого. Основная трудность при разработке такой возможности --- неясно, как различить такие файлы, потому что способы сильно различаются в разных операционных системах.

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

Как избежать подстановки


Подстановка ключевых слов имеет свои недостатки. Иногда бывает нужно, чтобы строка `$'Author$ появилась в файле без того, чтобы CVS интерпретировала её как ключевое слово и заменила на что-нибудь типа `$'Author: ceder $.

К сожалению, нельзя выборочно отключить подстановку ключевых слов. Можно использовать ключ командной строки `-ko' (see section Режимы подстановки), чтобы полностью выключить подстановку.

Во многих случаях вам нужно избежать использования ключевых слов в исходном тексте, даже несмотря на то, что они появятся в конечном продукте. Например, исходный текст этого руководства содержит `$@asis{}Author$' везде, где должна появиться строка `$'Author$. При использовании nroff и troff можно поместить в ключевое слово нулевой символ \&, чтобы добиться подобного эффекта.

Как обрабатывать двоичные файлы при импорте в CVS


Используйте опцию `-k', чтобы сказать команде `import', что файлы являются двоичными. See section Файл `cvswrappers'.

Как обрабатывать замену ключевых слов при импорте в CVS


Исходные тексты, которые вы импортируете, могут содержать ключевые слова (see section Подстановка ключевых слов). Например, поставщик мог использовать CVS или какую-нибудь другую систему, которая использует похожий синтаксис подстановки ключевых слов. Если вы просто импортируете файлы, то содержимое ключевых слов будет заменены вашим CVS. Вероятно, более удобно будет оставить ключевые слова в том виде, в котором они были у вашего поставщика, чтобы сохранить информацию об исходных текстах.

Чтобы сохранить содержимое ключевых слов, добавьте к команде cvs import при первом импорте ключ `-ko'. Это полностью выключит замену ключевых слов для этого файла, поэтому если хотите, то можете выборочно использовать разные ключи `-k' с командами cvs update и cvs admin.

Как отследить, кто редактирует файлы?


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

Для получения максимального преимущества разработчики должны использовать cvs edit (а не chmod), чтобы сделать файлы доступными для чтения/записи, и cvs release (а не rm) для удаления рабочего каталога, который более не используется. CVS не может вынудить их делать так.

Как помечать по дате или ревизии


Команда cvs rtag помечает репозиторий по состоянию на определенную дату и время (может использоваться для пометки последней ревизии). rtag работает прямо с содержимым репозитория (не требуется сначала извлекать рабочий каталог).

Нижеследующие ключи командной строки указывают, по какой дате или номеру ревизии помечать. См. section Стандартные ключи командной строки за полным их описанием. -D дата Помечает самую новую ревизию не позднее даты. -f Полезно только вместе с `-D дата' или `-r метка'. Если не обнаружено соответствующей ревизии, вместо игнорирования файла используется самая новая ревизия. -r метка Помечать только файлы, содержащие существующую метку метка.

Команда cvs tag также позволяет выбрать файлы по ревизии или по дате, используя те же ключи командной строки `-D' и `-f'. Однако, это, скорее всего, вовсе не то, что вам надо, потому что cvs tag выбирает, какие файлы помечать, основываясь на файлах, существующих в рабочем каталоге, а не на файлах, существовавших на заданную дату или в заданной ревизии. Таким образом, обычно лучше использовать cvs rtag. Исключением могут быть случаи типа: cvs tag -r 1.4 backend.c

Как редактировать файлы, за которыми наблюдают?


Так как файл, за которым следит кто-либо, извлекается в режиме только для чтения, то вы не можете просто взять и отредактировать его. Для того, чтобы сделать его доступным для записи и сообщить остальным, что вы планируете отредактировать этот файл, используйте команду cvs edit. Некоторые системы называют это извлечение, но пользователи CVS уже используют этот термин в смысле "получение копии исходных текстов" (see section Получение исходного кода), а эту операцию, в свою очередь, другие системы называют взять.

Команда: cvs edit [ключи] файлы ...

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

Команда cvs edit принимает такие же ключи командной строки, что и команда cvs watch add, и устанавливает временное слежение за файлами для пользователя; CVS прекратит слежение, когда будет выполнена команда unedit или команда commit. Если пользователь не хочет получать уведомления, он должен указать ключ -a none.

Файлы и ключи командной строки обрабатываются точно так же, как и для команды cvs watch.

Предупреждение: если в репозитории разрешена опция PreservePermissions (see section Файл конфигурации CVSROOT/config), то CVS не будет менять прав доступа к файлам. Причина этого изменения -- убедиться, что cvs edit не мешает хранению прав доступа к файлам в CVS-репозитории.

Обычно, когда вы закончите редактирование файлов, используйте команду cvs commit, которая проверит ваши изменения и вернет файлы, за которыми производилось слежение, в обычное состояние только для чтения. Если же вы вместо этого решите отменить изменения, или просто не станете ничего менять, используйте команду cvs unedit.

Command: cvs unedit [-lR] files ...

Отбросить все изменения в рабочих файлах files и привести их в соответствие с ревизией в репозитории. Если кто-либо запросил уведомление об изменениях каких-либо файлов, то CVS делает эти файлы доступными только для чтения. CVS уведомляет пользователей, которые запросили уведомление о команде unedit.

Ключи командной строки и список файлов обрабатываются точно так же, как для команды cvs watch.

Если слежение не используется, команда unedit, вероятно, не работает, и единственный способ вернуть файл в репозиторное состояние -- удалить его и использовать cvs update для получения новой копии. Семантика этой операции идентична команде unedit: удаление и обновление может внести также и изменения, которые были помещены в репозиторий с тех пор, как вы в последний раз обновляли свою рабочую копию.

При использовании сетевого CVS вы можете использовать команды cvs edit и cvs unedit, даже если CVS не смогла успешно соединиться с сервером. Уведомления будут посланы при следующем успешном выполнении какой-либо команды CVS.

Как с помощью CVS следить за определенными файлами?


Для того, чтобы включить использование функции слежения, сначала укажите, за какими файлами нужно следить.

Команда: cvs watch on [-lR] файлы ...

Команда означает, что разработчикам нужно выполнить команду cvs edit перед редактированием файлов. Для того, чтобы напомнить об этом разработчикам, CVS создаст рабочие копии файлов в режиме только для чтения.

Если среди файлов есть имя каталога, CVS включает слежение за всем файлами, находящимися в соответствующем каталоге репозитория и автоматически включает режим слежения за всеми файлами, которые будут в дальнейшем добавлены в каталог; это позволяет пользователю задать стратегию уведомлений для каждого каталога. Содержимое каталога обрабатывается рекурсивно, если только не задан ключ командной строки -l. Ключ -R позволяет включить рекурсивное поведение, если в файле `~/.cvsrc' оно было выключено с помощью ключа -l (see section Ключи по умолчанию и файл ~/.cvsrc).

Если список файлов пропущен, по умолчанию обрабатывается текущий каталог.

Команда: cvs watch off [-lR] файлы ...

Команда означает, что при извлечении не нужно создавать файлы в режиме только для чтения; таким образом, разработчики не будут получать напоминания о необходимости использования cvs edit и cvs unedit. CVS будет извлекать файлы в обычном режиме, если только на файле не установлены специальные права доступа, разрешенные с помощью ключевого слова PreservePermissions в административном файле `config' (см. section Специальные файлы и See section Файл конфигурации CVSROOT/config).

Файлы и ключи командной строки обрабатываются точно так же, как и для cvs watch on.

Как сообщить CVS, где находится репозиторий


Существует несколько способов сообщить CVS, где искать репозиторий. Вы можете явно задать репозиторий в командной строке с помощью опции -d ("directory", каталог): cvs -d /usr/local/cvsroot checkout yoyodyne/tc

Другим вариантом является установка переменной окружения $CVSROOT в полный путь до корня репозитория, например, `/usr/local/cvsroot'. Чтобы установить $CVSROOT, пользователи csh и tcsh должны поместить в свой файл `.cshrc' или `.tcshrc' такую строку: setenv CVSROOT /usr/local/cvsroot

Пользователи sh и bash должны поместить в свой файл `.profile' или `.bashrc' такие строки CVSROOT=/usr/local/cvsroot export CVSROOT

Имя репозитория, указанное с помощью -d, будет использоваться вместо указанного в переменной окружения $CVSROOT. Когда вы извлечете рабочую копию из репозитория, эта копия будет помнить, из какого именно репозитория ее извлекли (эта информация хранится в файле `CVS/Root' в рабочем каталоге).

Опция -d и файл `CVS/Root' переопределяют репозиторий, заданный в переменной окружения $CVSROOT. Если репозиторий, заданный опцией -d, отличается от репозитория, указанного в файле `CVS/Root', используется первый из них. Конечно же, для правильного функционирования должно быть несколько способов обращаться к одному и тому же репозиторию.

Как в каталоге CVSROOT хранятся файлы


Каталог `$CVSROOT/CVSROOT' содержит различные административные файлы. В каком-то смысле этот каталог подобен любому другому каталогу в репозитории; он содержит RCS-файлы, чьи имена заканчиваются на `,v', и многие команды CVS оперируют с ними обычным образом. Однако, имеется несколько различий.

Для каждого административного файла, в дополнение к RCS-файлу, хранится его последняя ревизия. Например, есть RCS-файл `loginfo,v' и файл `loginfo', содержащий последнюю ревизию, находящуюся в `loginfo,v'. Когда вы фиксируете административный файл, CVS должен написать: cvs commit: Rebuilding administrative file database

и обновить его извлеченную копию в `$CVSROOT/CVSROOT'. Если это не так, значит, что-то случилось с CVS (see section Что делать с ошибками в CVS и этом руководстве?). Чтобы ваши CVS обращался с вашими собственными файлами точно так же, вы можете добавить их имена в административный файл `checkoutlist'.

По умолчанию, файл `modules' ведет себя как описано выше. Если же он становится очень большим, то хранение в виде плоского файла может привести к медленному поиску модулей (я не уверен, что это все еще столь же важно, как и тогда, когда эта возможность впервые появилась; я не видел расчетов быстродействия). Таким образом, внеся определенные изменения в исходный код CVS, можно хранить файл модулей в базе данных, которая имеет интерфейс с ndbm, например, Berkeley db или GDBM. Если эта опция используется, то база данных модулей будет храниться в файлах `modules.db', `modules.pag' и/или `modules.dir'.

Информация о назначении разнообразных административных файлов находится в section Справочник по административным файлам.

Как ваша система сборки взаимодействует с CVS


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

Обычным вопросом, особенно для людей, знакомых с RCS, является "как сделать так, чтобы проект компилировался из самых свежих исходных текстов. Ответ на этот вопрос неоднозначен. Во-первых, так как CVS может рекурсивно обходить дерево каталогов, то не требуется изменять ваши файлы `Makefile' (или тот файл, что используется вашими инструментами для сборки), чтобы убедиться, что каждый файл является самым свежим. Вместо этого просто используйте две команды, сначала cvs -q update, а затем make или ту команду, которую вы выполняете, чтобы запустить вашу систему сборки. Во-вторых, вам не обязательно требуется получать копии изменений, которые сделал кто-то другой, пока вы не закончили свою собственную работу. Рекомендуется сначала обновить ваши исходные тексты, затем сделать изменение, собрать проект, проверить его, а затем зафиксировать изменения (сначала опять обновив исходники, если требуется). Периодически (в промежутке между изменениями, используя описанный подход) обновляя всё дерево исходных текстов, вы остаётесь в уверенности, что ваши исходники достаточно свежи.

Обычно необходимо записывать, какие ревизии исходных файлов использовались для построения конкретной версии продукта. Такая функциональность иногда называется списком использованных материалов. Лучшим способом добиться этого с помощью CVS --- использовать команду tag (see section Метки ревизий).

Используя CVS простейшим способом, каждый разработчик будет иметь копию всего дерева исходников, которые использовались в конкретных версиях проекта. Если дерево небольшое, или если разработчики удалены друг от друга географически, то это --- предпочтительное решение. В действительности ещё одним подходом к большим проектам является разбить их на меньшие подсистемы, компилируемые по отдельности, и обустроить механизм внутренних релизов, чтобы каждый разработчик мог извлекать те подсистемы, над которыми он активно работает.

Другой подход -- создать структуру, позволяющую разработчикам иметь собственные копии некоторых файлов, а за остальными файлами обращаться в центральное хранилище. Многие предлагали подобные системы, используя такие возможности, как символические ссылки, существующие во многих операционных системых, или механизм VPATH, поддерживаемый многими версиями программы make. Например, одним из инструментов для сборки проекта, разработанным для этого, является Odin (см. ftp://ftp.cs.colorado.edu/pub/distribs/odin).

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

Каталог CVS в репозитории


Каталог `CVS' в каждом репозитории содержит информацию об атрибутах файлов (в файле `CVS/fileattr'); смотри `fileattr.h' среди исходных текстов CVS за дополнительной информацией. В будущем в этом каталоге могут оказать другие дополнительные файлы, поэтому сегодняшние реализации должны игнорировать неизвестные файлы.

Это поведение реализовано только в версиях CVS 1.7 и выше, смотри section Использование слежений со старыми версиями CVS.

Ключи команды admin


Некоторые ключи имеют сомнительную полезность для CVS, но существуют по историческим причинам. Некоторые даже приводят к невозможности использования CVS, пока вы не отмените их действие! -Aстарый_файл Может не работать совместно с CVS. Добавляет список доступа старого_файла к списку доступа RCS-файла. -aимена Может не работать совместно с CVS. имена перечисляются через запятую. Добавляет имена к списку доступа RCS-файла. -b[ревизия] Устанавливает ветку по умолчанию& В CVS вы обычно не манипулируете ветками по умолчанию, вместо этого используются липкие метки (see section Липкие метки). Есть одна причина использовать cvs admin -b: вернуть обратно версию от поставщика при использовании веток поставщика (see section Возврат к последней версии от поставщика). Между `-b' и аргументом не должно быть пробела. -cстрока Делает строку префиксом комментария. Этот префикс не используется ни в текущей версии CVS, ни в RCS 5.7, таким образом, о нём можно не беспокоиться. See section Подстановка ключевых слов. -e[имена] Может не работать совместно с CVS. имена перечисляются через запятую. Удаляет имена из списка доступа RCS-файла. Если имена не заданы, очищает весь список доступа. -I Выполняется интерактивно, даже если стандартный ввод не является терминалом. Этот ключ не работает с сетевой версией CVS и, скорее всего, исчезнет в будущих версиях CVS. -i Бесполезный ключ. Создает новый RCS-файл, не создавая новой ревизии. Файлы можно добавлять в репозиторий с помощью команды cvs add (see section Добавление файлов в каталог). -ksubst Устанавливает режим подстановки ключевых слов по умолчанию. See section Подстановка ключевых слов. Явное указание режима подстановки при использовании команд cvs update, cvs export и cvs checkout переопределяет этот режим по умолчанию. -l[rev] Блокировать ревизию с номером rev. Если указан номер ветки, заблокировать самую последнюю ревизию на ветке. Если rev опущено, заблокировать последнюю ревизию на ветке по умолчанию. Между `-l' и аргументом не может быть пробела.
Этот ключ можно использовать в сочетании со скриптом `rcslock.pl', находящимся в каталоге `contrib/' в дистрибутиве CVS, для того, чтобы пользоваться блокированными извлечениями (когда только один пользователь в каждый момент времени может редактировать данный файл). Смотрите комментарии в этом файле за дальнейшей информацией (а также файл `README' в каталоге `contrib/', где содержится уведомление об отсутствующей поддержке для содержимого этого каталога.) В соответствии с вышеупомянутыми комментариями следует установить жесткий режим блокировки (по умолчанию это именно так). -L Установить жесткий режим блокировки. Это означает, что владелец RCS-файла наравне со всеми прочими должен блокировать файл перед внесением в него изменений. Для работы с CVS жесткий режим блокировки должен быть установлен; смотри обсуждение этого вопроса в описании ключа `-l'. -mrev:msg Заменить журнальное сообщение ревизии rev на msg. -Nимя[:[rev]] Действует так же, как `-n', переопределяя уже существующее имя. Об использовании с волшебными ветками смотри section Волшебные номера веток. -nимя[:[rev]] Связывает алфавитное имя с веткой или ревизией rev. Обычно вместо этого ключа лучше использовать `cvs tag' и `cvs rtag'. Если двоеточие и rev опущены, удаляет имя; в противном случае сообщает об ошибке, если имя уже связано с каким-либо номером. Если rev является алфавитным именем, то оно перед связыванием заменяется на соответствующий номер. Если rev состоит из номера ветви, за которым следует точка, то это означает самую свежую ревизию на ветке. Двоеточие с отсутствующим rev означает самую свежую ревизию на ветке по умолчанию, или на стволе. Например, `cvs admin -nname' связывает name с последней ревизией всех RCS-файлов; подобно этому `cvs admin -nname:$' связывает name с номерами ревизий, извлеченных из содержимого ключевых слов в соответствующих рабочих файлах. -oдиапазон Удаляет (делает устаревшими) ревизии, заданные диапазоном. Заметьте, что эта команда может быть весьма опасна, если только вы не знаете точно, что именно вы делаете (например, смотрите предупреждения о возможной путанице в синтаксисе rev1:rev2).


Если вам не хватает дискового пространства, то эта команда может вам помочь. Подумайте дважды перед её использованием: отменить действие этой команды нельзя никак, кроме восстановления с резервных копий. Вероятно, неплохо будет сначала поэкспериментировать на копии репозитория. диапазон задаётся одним из нескольких способов: rev1::rev2 Уничтожить ревизии между rev1 и rev2, так что CVS будет хранить только изменения между rev1 и rev2, но не промежуточные изменения. Например, после выполнения команды `-o 1.3::1.5' можно извлечь ревизию 1.3, ревизию 1.5, разницу между 1.3 и 1.5, но не ревизию 1.4 или разницу между 1.3 и 1.4. Другой пример: `-o 1.3::1.4' и `-o 1.3::1.3' не совершат никакого действия, потому что удалять в данных случаях нечего. ::rev Удаляет ревизии между началом ветки, содержащей rev, и самой rev. Точка начала ветки и rev остаются нетронутыми. Например, `-o ::1.3.2.6' удаляет ревизию 1.3.2.1, ревизию 1.3.2.5 и все ревизии в промежутке между ними, но не трогает 1.3 и 1.3.2.6. rev:: Удаляет ревизии между rev и концом ветки, содержащей rev. Ревищия rev остается нетронутой, но головная ревизия (HEAD) удаляется. rev Удаляет ревизию rev. Например, `-o 1.3' эквивалентно `-o 1.2::1.4'. rev1:rev2 Удаляет ревизии от rev1, включительно, до rev2, включительно, находящиеся на одной ветке. После выполнения команды нельзя будет извлечь ревизии rev1, rev2, а также все ревизии в промежутке между ними. Например, команда `cvs admin -oR_1_01:R_1_02 .' редко бывает полезна. Она означает "удалить ревизии вплоть до метки `R_1_02', включительно". Осторожно! Если есть файл, которые изменились между `R_1_02' и `R_1_03', то в файле соответствующим меткам будут присвоены одинаковые номера ревизии. Из-за этого не только нельзя будет извлечь `R_1_02', но и `R_1_03' потребуется восстанавливать с резервных копий. В большинстве случаев следует использовать вариант `rev1::rev2'. :rev Удалить ревизии с начала ветки, содержащей rev, вплоть до самой rev, включительно. rev: Удалить ревизии от rev, включительно, до конца ветки, содержащей rev.


Ревизии не могут быть удалены, если они заблокированы или с них начинаются ветви. Если ревизии имеют алфавитные имена и вы используете эти имена в сочетании с синтаксисом `::', то CVS выдаст сообщение об ошибке и не будет удалять такие ревизии. Если вы действительно хотите удалить алфавитные имена и ревизии, то сначала удалите имена с помощью cvs tag -d, затем выполните cvs admin -o. Если вы не используете синтаксис `::', то CVS удалит ревизии, но оставит алфавитные имена, которые ссылаются на несуществующие ревизии. Такое поведение оставлено для совместимости с предыдущими версиями CVS, но так как оно не очень полезно, то в будущем может измениться, чтобы совпадать со случаем `::'. Из-за способа, которым CVS обрабатывает ветви, rev нельзя задавать в виде алфавитного имени, если эта ревизия находится на ветке. В section Волшебные номера веток объясняется, почему это так. Убедитесь, что никто не извлёк копию ревизии, которую вы делаете устаревшей. Могут произойти странные вещи, если кто-то редактирует эту ревизию и пытается зафиксировать её. Из-за этого ключ `-o' не следует использовать для отмены ошибочного фиксирования, вместо этого фиксируйте ещё одну ревизию, исправляющую ошибочное изменение (see section Слияние изменений между двумя ревизиями). -q Работать тихо, не выдавать сопроводительных сообщений. -sstate[:rev] Полезно использовать вместе с CVS. Устанавливает атрибут состояния ревизии rev в state. Если rev --- это номер ветви, то использовать последнюю ревизию на этой ветви. Если rev опущена, использовать последнюю ревизию на ветви по умолчанию. В качестве state можно использовать любой идентификатор. Полезным набором является `Exp' (экспериментальный), `Stab' (стабильный) и `Rel' (вошедший в конечный продукт). По умолчанию состояние новой ревизии при создании устанавливается в `Exp'. Состояние сообщается командой `cvs log' (see section Команда log: напечатать информацию о файлах) и в ключевых словах `$'Log$ и `$'State$ (see section Подстановка ключевых слов). Заметьте, что CVS использует состояние dead для своих внутренних нужд; для того, чтобы поместить файл в состояние dead или восстановить его из этого состояния, используйте команды cvs remove и cvs add, а не cvs admin -s. -t[файл] Полезно при использовании вместе с CVS.


Берёт из файла описание указанного RCS-файла, удаляя его старое описание. Имя файла не должно начинаться с минуса. Описание файла можно увидеть в выдаче команды `cvs log' (see section Команда log: напечатать информацию о файлах). Между `-t' и его аргументом не должно быть пробела. Если файл опущен, то описание берётся со стандартного ввода, завершённое символом конца файла или строчкой, состоящей из единственного символа "точка". При работе с терминала текст описания запрашивается у пользователя, смотри `-I'. Чтение со стандартного ввода не работает в клиент-серверной CVS и может измениться в будущей версии CVS. -t-строка Похоже на `-tфайл'. Текст описания берётся из строки, заменяя уже существующее описание. Между `-t' и его аргументом не должно быть пробелов. -U Устанавливает мягкий режим блокировок. Это означает, что владелец файла не обязан блокировать ревизию перед фиксированием. Для использования в CVS должен быть установлен жёсткий режим блокировок; смотри выше обсуждение ключа `-l'. -u[rev] Смотри выше описание ключа `-l', где обсуждается использование этого ключа в CVS. Разблокировать ревизию rev. Если дан номер ветки, разблокировать последнюю ревизию на этой ветке. Если rev опущена, удалить последнюю блокировку, сделанную пользователем в этом файле. Обычно только тот, кто сделал блокировку, может снять её. Если это делает кто-то другой, то это называется взломом блокировки. В этом случае владельцу блокировки отсылается уведомление по электронной почте. Почтовое сообщение может содержать комментарий, предоставленный тем, кто взломал блокировку. Комментарий завершается концом файла или строкой, состоящей из единственной точки. Между ключом `-u' и его аргументом не должно быть пробела. -Vn В предыдущей версии CVS этот ключ означал, что RCS-файл нужно создавать в формате, понимаемой программой RCS версии n. В настоящий момент этот ключ устарел и его использование приводит к сообщению об ошибке. -xsuffixes В предыдущих версиях CVS этот ключ можно было использовать, чтобы задать имена RCS-файлов.Однако, CVS требует, чтобы имена RCS-файлов оканчивались на `,v', поэтому этот ключ никогда не был полезен.

Ключи команды checkout


Команда checkout поддерживает стандартные ключи, описанные в section Стандартные ключи командной строки: -D date Использовать самую свежую ревизию, созданную не позднее date. Этот ключ является липким, и подразумевает использование ключа `-P'. См. section Липкие метки за дальнейшей информацией о липких метках и датах. -f Полезен только при использовании совместно с ключами `-D date' или `-r tag'. Если не найдено подходящей ревизии, извлечь самую свежую ревизию, а не игнорировать файл. -k kflag Обрабатывать ключевые слова в соответствии с kflag. См. section Подстановка ключевых слов. Этот ключ является липким: дальнейшие обновления этого рабочего каталога будут использовать тот же самы kflag. Для того, чтобы увидеть липкие ключи, используйте команду status. См. section Краткий справочник по командам CVS за дальнейшей информацией о команде status. @std-option-l -n Не выполнять программ при извлечении (тех, что указаны в файле `modules' с помощью ключа `-o'). see section Файл `modules'). -P Удалять пустые каталоги. См. section Перемещение и переименование каталогов. -p Выдавать содержимое файлов на стандартный вывод. @std-option-R{Извлекать} -r tag Использовать ревизию tag. Этот ключ является липким и подразумевает использование `-P'. См. section Липкие метки за дальнейшей информацией о липких метках и датах.

Вдобавок к этому, можно использовать следующие ключи команды checkout: -A Очистить липкие метки, даты и ключи `-k'. См. section Липкие метки за дальнейшей информацией о липких метках и датах. -c Копировать отсортированное содержимое файла `modules' на стандартный вывод, вместо того, чтобы создавать или изменять файлы или каталоги в рабочем каталоге. -d dir Создать каталог с рабочими файлами, который называется dir, а не использовать имя модуля. Вообще использование этого флага эквивалентно использованию `mkdir dir; cd dir', за которым следует команда извлечения без ключа `-d'. Однако же, существует важное исключение из этого правила. При извлечении одиночного файла очень удобно, чтобы файл создавались в каталоге, не содержащем пустых промежуточных каталогов.
В этом, и только в этом случае CVS пытается "укоротить" пути к файлам, чтобы избежать подобных пустых каталогов. Например, если имеется модуль `foo', содержащий файл `bar.c', то команда `cvs co -d dir foo' создаст каталог `dir/' и поместит внутрь файл `bar.c'. Аналогично, если есть модуль `bar', в котором есть подкаталог `baz/', в котором есть файл `quux.c', то команда `cvs -d dir co bar/baz' создаст каталог `dir/' и поместит туда файл `quux.c'. Использование флага `-N' запретит такое поведение. В случае вышеописанной структуры модулей `cvs co -N -d dir foo' создаст каталоги `dir/foo' и поместит туда файл `bar.c', а команда `cvs co -N -d dir bar/baz' создаст каталоги `dir/bar/baz/' и поместит туда файл `quux.c'. -j tag Если используются два ключа `-j', то изменения, сделанные в ревизии, указанной в первом ключе, будут объединены с ревизией, указанной во втором ключе, и помещены в рабочий каталог. With one `-j' option, merge changes from the ancestor revision to the revision specified with the `-j' option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the `-j' option. Вдобавок каждый ключ `-j' может задавать дату, которая, если используется вместе с ветвями, может ограничить выбор ревизий только подпадающими под эту дату. Дата задаётся с помощью двоеточия: `-jАлфавитная_Метка:Указание_Даты'. See section Создание ветвей и слияние. -N Полезен только с `-d dir'. При задании этого ключа CVS не будет "укорачивать" пути к модулям в вашем рабочем каталоге, когда вы извлекаете одиночный модуль. См. описание флага `-d', где обсуждается этот вопрос и даются примеры. -s Похоже на `-c', но выдает также статус модулей и сортирует их в соответствии с этим статусом. See section Файл `modules', за информацией о том, как ключ `-s' используется для задания в файле `modules' статуса модуля.

Ключи команды commit


Следующие стандартные ключи (их полное описание можно найти в section Стандартные ключи командной строки) поддерживаются командой commit: -l @std-option-l -n Не выполнять программ, относящихся к модулю. @std-option-R{Фиксировать} -r рев Фиксировать с номером ревизии рев: это либо номер ветки, либо номер ревизии на основном стволе, больший, чем все существующие номера ревизии (see section Назначение номеров ревизий). Нельзя помещать изменения в ревизию, находящуюся на ветке.

Команда commit также поддерживает следующие ключи: -F file Прочесть журнальное сообщение из файла файл, не запускать редактор для ввода этого сообщения. -f Заметьте, что поведение ключа `-f' в этой команде отличается от стандартного, которое описано в section Стандартные ключи командной строки. Заставляет CVS зафиксировать новую ревизию, даже если вы не сделали никаких изменений в файле. Если текущая ревизия файла имеет номер 1.7, то следующие две команды эквивалентны: $ cvs commit -f file $ cvs commit -r 1.8 file Ключ `-f' запрещает рекурсию (то есть подразумевает использование `-l'). Для того, чтобы заставить CVS зафиксировать новую ревизию для всех файлов во всех подкаталогах, используйте `-f -R'. -m сообщение Использовать сообщение в качестве журнального сообщения, не вызывать редактор.

Ключи команды diff


Команда checkout поддерживает стандартные ключи, описанные в section Стандартные ключи командной строки: -D дата Использовать самую свежую ревизию, созданную не позже чем дата. См. описание `-r', где описывается, как это влияет на результаты сравнения. -k kflag Обрабатывать ключевые слова в соответствии с kflag. См. section Подстановка ключевых слов. @std-option-l @std-option-R{Обрабатывать} -r tag Сравнивать с ревизией метка. Можно задать от нуля до двух ключей `-r'. Без ключа `-r' рабочий файл будет сравниваться с ревизией, на которой он основан. С одним ключом `-r' указанная ревизия будет сравниваться с вашим рабочим файлом. С двумя ключами `-r' указанные две ревизии будут сравниваться друг с другом (а содержимое рабочих файлов не будет влиять на выдачу команды). Один или оба ключа `-r' можно заменить на ключ `-D дата', описанный выше.

Нижеследующие ключи задают формат выдачи. Они имеют то же значение, что и в программе GNU diff. -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 --binary --brief --changed-group-format=arg -c -C nlines --context[=lines] -e --ed -t --expand-tabs -f --forward-ed --horizon-lines=arg --ifdef=arg -w --ignore-all-space -B --ignore-blank-lines -i --ignore-case -I regexp --ignore-matching-lines=regexp -h -b --ignore-space-change -T --initial-tab -L label --label=label --left-column -d --minimal -N --new-file --new-line-format=arg --old-line-format=arg --paginate -n --rcs -s --report-identical-files -p --show-c-function -y --side-by-side -F regexp --show-function-line=regexp -H --speed-large-files --suppress-common-lines -a --text --unchanged-group-format=arg -u -U nlines --unified[=lines] -V arg -W columns --width=columns

Ключи команды export


Команда export поддерживает стандартные ключи, описанные в section Стандартные ключи командной строки: -D date Использовать саму свежую ревизию не позже чем date. @std-option-f @std-option-l -n Не выполнять программ при извлечении. @std-option-R -r метка Использовать ревизию метка.

Вдобавок поддерживаются следующие ключи (общие для checkout и export): -d dir Создать для рабочих файлов каталог dir, а не использовать имя модуля. See section Ключи команды checkout, где полностью описаны детали обработки этого флага. -k subst Установить режим подстановки ключевых слов (see section Режимы подстановки). -N Полезно только при использовании вместе с `-d dir'. See section Ключи команды checkout, где полностью описаны детали обработки этого флага.

Ключи команды history


Несколько флагов, показанных выше в качестве параметра `-report', задают вид генерируемого отчета: -c Сообщить о всех командах commit (то есть о каждом изменении репозитория). -e Сообщить обо всем (все виды записей). Эквивалентно заданию `-x' со всеми типами записей. Конечно, `-e' будет также включать все типы записей, которые будут добавлены в будущих выпусках CVS; если вы пишете скрипт, которые может обрабатывать только определенные типы записей, используйте `-x'. -m module Сообщать об изменениях конкретного модуля (Можно использовать `-m' несколько раз в одной командной строке.) -o Сообщать об извлеченных модулях. -T Сообщать обо всех метках. -x type Извлекать указанный набор типов записей type из истории CVS. Типы задаются одиночными буквами, которые можно использовать в комбинациях. Некоторые команды имеют единственный тип записи: F release O checkout E export T rtag После выполнения команды update могут появиться одна из четырех типов записей: C A merge was necessary but collisions were detected (requiring manual merging). G A merge was necessary and it succeeded. U A working file was copied from the repository. W The working copy of a file was deleted during update (because it was gone from the repository). После выполнения команды commit могут возникнуть одна из трех типов записей: A A file was added for the first time. M A file was modified. R A file was removed.

Ключи, показанные в виде параметра `-flags', задают дополнительные ограничения или, наоборот, добавляют дополнительную информацию к отчету, не требуя дополнительных парамтров: -a Показать данные обо всех пользователях (по умолчанию выдается только информация о пользователе, выполняющем команду history). -l Показать только последнее изменение. -w Показать только записи об изменениях, выполненных из того же рабочего каталога, где выполняется команда history.

Ключи, показанные в виде параметра `-options args', задают дополнительные ограничения, используя аргументы: -b str Показывать данные от конца вплоть до последней строки str, встреченной в имени модуля, имени файла или пути к репозиторию. -D дата Показывать данные с даты. Это немного отличается от обычного использования `-D дата', при котором извлекаются самые свежие ревизии, старше чем дата. -p repository Показывать данные, относящиеся к конкретному репозиторию (вы можете задать в командной строке больше одного ключа `-p'.) -r rev Показывать записи, относящиеся к ревизиям, появившимся после появления ревизии или метки rev. Соответствующие ревизии или метки ищутся в каждом RCS-файле. -t tag Показывать записи, сделанные с тех пор, как в файле истории появилась запись о метке tag. Это отличается от ключа `-r' тем, что читается только файл истории, а не RCS-файлы, что гораздо быстрее. -u name Показывать записи о пользователе name.

Ключи команды import


Команда import поддерживает стандартный ключ, описанный в see section Стандартные ключи командной строки: -m сообщение Использовать сообщение в качестве журнальной записи, а не вызывать редактор.

Есть также нижеследующие специальные ключи: -b branch См. section Несколько веток поставщика. -k subst Задает желаемый режим подстановки ключевых слов. Этот параметр будет влиять на все файлы, созданные во время импорта, но не на те, что уже существовали в репозитории. См. section Режимы подстановки, где описываются разрешенные параметры ключа `-k'. -I name Задает имена файлов, которые следует игнорировать при импорте. Этот ключ можно использовать несколько раз. Чтобы не игнорировать ни один файл, задайте `-I !'. name может быть шаблоном имен файлов, типа тех, что можно задать в файле `.cvsignore'. See section Игнорирование файлов с помощью cvsignore. -W spec Задает имена файлов, которые следует профильтровать перед импортом. Этот ключ можно использовать несколько раз. spec может быть шаблоном имен файлов, типа тех, что можно задать в файле `.cvswrappers'. See section Файл `cvswrappers'.

Ключи команды log


По умолчанию команда log сообщает всю доступную информацию. Ключи предназначены для ограничения выдачи. -b Печатает информацию о ревизиях на ветке по умолчанию, обычно это самая верхняя ветка на стволе. -d dates Печатает информацию о ревизиях, помещенных в репозиторий в промежутке времени, заданном списком дат через точку с запятой. Форматы дат те же, что используются вместе с ключом `-D' (see section Стандартные ключи командной строки). Даты можно комбинировать следующим образом: d1d2 d2>d1 Выбрать ревизии, которые были помещены в репозиторий между датой d1 и датой d2. d d> Выбрать все ревизии, датированные d или раньше. d >d Выбрать все ревизии, датированные d или позже. d Выбрать последнюю ревизию, датированную d или раньше. Вместо символов `>' и ` можно использовать ` и `>=', чтобы задать диапазон включительно, а не исключительно. Между ключом `-d' и его аргументом не должно быть пробела. Заметьте также, что разделителем является точка с запятой (`;'). -h Печатает только имя RCS-файла, имя файла в рабочем каталоге, головную ревизию, ревизию по умолчанию, список прав доступа, блокировки, алфавитные имена и суффикс. @std-option-l -N Не выдает список меток для этого файла. Этот ключ полезен, если вы используете много меток, чтобы избежать просматривания трех экранов информации о метках. -R Печатает только имя RCS-файла. -rrevisions Печатает информацию о ревизиях, перечисленных в списке ревизий и их диапазонов, разделенных запятыми. В этой таблице приведены все доступные форматы диапазонов: rev1:rev2 Ревизии от rev1 до rev2 (должны находиться на одной ветке). :rev Ревизии с начала ветки вплоть до rev включительно. rev: Ревизии, начиная с rev до конца ветки, содержащей rev. branch Аргумент, являющийся веткой означает все ревизии на этой ветке. branch1:branch2 Диапазон ветвей означает все ревизии на ветках в этом диапазоне. branch. Последнюю ревизию на ветке branch. Пустой ключ `-r', без списка ревизий, означает использование последней ревизии на ветке по умолчанию, обычно на стволе. Между ключом `-r' и его параметром не должно быть пробела. -s states Печатает информацию о ревизиях, чей атрибут состояния совпадает с состоянием из разделенного запятыми списка states. -t Печатает то же самое, что и `-h', плюс текст описания. -wlogins Печатает информацию о ревизиях, созданных пользователями, перечисленными через запятую в списке logins. Если список опущен, используется имя текущего пользователя. Между ключом `-w' и его аргументом не должно быть пробела.

log печатает информацию о ревизиях удовлетворяющих ключам `-d', `-s', `-w' и совокупности ключей `-b' и `-r'.

Ключи команды rdiff


Команда rdiff поддерживает стандартные ключи, описанные в see section Стандартные ключи командной строки: -D date Использовать саму свежую ревизию, сделанную не позже date. @std-option-f @std-option-l @std-option-R -r tag Использовать ревизию tag.

Вдобавок доступны следующие ключи: -c Использовать контекстный формат. По умолчанию это именно так. -s Создать вместо файла с исправлениями краткий отчет об изменениях. Отчет содержит информацию о файлах, которые были изменены или добавлены в промежутке между версиями. Этот отчет выдается на стандартный вывод. Это полезно, например, для выяснения, какие именно файлы изменились между двумя датами или ревизиями. -t Изменения между двумя последними ревизиями выдаются на стандартный вывод. Это особенно полезно для выяснения, в чем заключалось последнее изменение файла. -u Использовать унифицированный формат файла изменений. Учтите, что старые версии программы patch не могли обрабатывать этот формат, поэтому если вы планируете опубликовать изменения в сети, то вам, скорее всего, не следует использовать ключ `-u'. -V vn Раскрывать ключевые слова в соответствии с правилами, принятыми в RCS версии vn (формат подстановки изменился в RCS версии 5). Заметьте, что этот ключ больше не обрабатывается. CVS всегда будет раскрывать ключевые слова так, как этот делает RCS версии 5.

Ключи команды release


Команда release поддерживает единственный ключ: -d Удалить рабочую копию файлов, если все нормально. Если этот флаг не указан, то ваши файлы останутся в вашем рабочем каталоге. Предупреждение: Команда release рекурсивно удаляет все каталоги и файлы. Это имеет очень важный побочный эффект: все каталоги, которые вы создали в извлеченном дереве исходников, но не добавили в репозиторий (используя команду add; see section Добавление файлов в каталог) будут бесшумно удалены --- даже если эти каталоги непусты!

Ключи команды update


Команда update поддерживает стандартные ключи, которые полностью описаны в see section Стандартные ключи командной строки: -D date Использовать самую свежую ревизию, созданную не позже date. Этот ключ является липким, и подразумевает использование ключа `-P'. См. section Липкие метки, где полностью описаны липкие метки и даты. -f Полезно только при использовании вместе с ключами `-D дата' или `-r метка'. Если не найдено совпадающей ревизии, извлечь самую свежую ревизию, а не игнорировать файл. -k kflag Обрабатывать ключевые слова в соответствии с kflag. См. section Подстановка ключевых слов. Этот ключ является липким; дальнейшие обновления этого файла в рабочем каталоге будут использовать тот же самый kflag. Команду status можно использовать для просмотра липких ключей. См. section Краткий справочник по командам CVS, где описана команда status. @std-option-l -P Удалять пустые каталоги. См. section Перемещение и переименование каталогов. -p Писать файлы в стандартный вывод. @std-option-R{Обрабатывать} -r rev Извлечь ревизию/метку rev. Этот ключ является липким и подразумевает использование `-P'. См. section Липкие метки, где полностью описаны липкие метки и даты.

Команду update можно также использовать с такими ключами: -A Очистить липкие метки, даты и ключи `-k'. См. section Липкие метки, где описаны липкие метки и даты. -d Создавать каталоги, существующие в репозитории, если они отсутствуют в рабочем каталоге. Обычно update работает только с файлами и каталогами, которые уже были созданы в рабочем каталоге. Этот ключ полезен при обновлении каталогов, которые были созданы в репозитории уже после извлечения вашей рабочей копии, но у него есть неприятный побочный эффект: если вы специально избегали определенных каталогов в репозитории, когда создавали рабочий каталог (используя имена модулей или явно перечисляя в командной строке требуемые файлы и каталоги), то обновление с ключом `-d' создаст эти нежелаемые каталоги. -I name Во время обновления игнорировать файлы в вашем рабочем каталоге, чьи имена совпадают с name.
Можно использовать этот ключ несколько раз, чтобы задать несколько файлов, которые нужно игнорировать. Используйте `-I !', чтобы не игнорировать ни один файл. See section Игнорирование файлов с помощью cvsignore, где описаны другие способы игнорирования файлов. -Wspec Задает имена файлов, которые следует фильтровать во время обновления. Этот ключ можно использовать несколько раз. spec -- это шаблон имен файлов типа тех, что можно использовать в файле `.cvswrappers'. See section Файл `cvswrappers'. -jrevision При использовании двух ключей `-j' в рабочем каталоге происходит объединение изменений между ревизией, заданной первым ключом, и ревизией, заданной вторым ключом. При использовании одного ключа `-j' в рабочем каталоге происходит слияние изменений между ревизией-предком и ревизией, заданной ключом `-j'. Ревизия-предок -- это общий предок ревизии, на основе которой создан рабочий каталог, и ревизии, заданной ключом `-j'. Вдобавок, каждый ключ `-j' может содержать необязательное указание даты, которая, при использовании вместе с ветвями, может дополнительно ограничить выбор ревизий. Необязательная дата задается добавлением двоеточия (`:') к метке: `-jSymbolic_Tag:Date_Specifier'. See section Создание ветвей и слияние.

Ключи по умолчанию и файл ~/.cvsrc


Имеются определённые ключи команд CVS, которые используются столь часто, что вы захотите настроить для них что-то типа синонима. Основным примером (именно он и привел к поддержке файла `~/.cvsrc') является то, что многим не нравится стандартная форма выдачи изменений, которая используется в команде `diff', и они предпочитают контекстную или унифицированную выдачу изменений, которые выглядят значительно лучше.

Файл `~/.cvsrc' -- это способ установить ключи по умолчанию для команд CVS, не используя синонимов, скриптов оболочки и т. п.

Формат файла `~/.cvsrc' прост. В нем ищется строка, чье начало совпадает с именем выполняемой команды CVS. Если совпадающая строка найдена, то остаток строки расщепляется на ключи командной строки и добавляется к командной строке перед ключами из настоящей командной строки.

Если у команды есть два имени (например, checkout и co), то для поиска используется официальное имя, не обязательно совпадающее с тем, что использовалось при вызове CVS. Таким образом, если содержимое файла `~/.cvsrc' таково: log -N diff -u update -P checkout -P

то к аргументам команды `cvs checkout foo' добавится ключ `-P', и точно то же самое произойдет с командой `cvs co foo'.

При использовании вышеприведенного файла команда `cvs diff foobar' будет выдавать изменения в унифицированном формате. `cvs diff -c foobar' будет, как обычно, выдавать контекстные изменения. Получение изменений в "старом" формате чуть более сложно, потому что у команды diff нет способа задать выдачу в "старом" формате, поэтому вам потребуется использовать `cvs -f diff foobar'.

Вместо имени команды вы можете использовать cvs, чтобы задать глобальные ключи (see section Глобальные ключи командной строки). Например, такая строка в файле `~/.cvsrc' включит использование шестого уровня компрессии: cvs -z6

Код выхода CVS


CVS может сообщить вызывающей программе, успешно ли завершилась операция или нет, возвращая тот или иной код выхода. Точный способ проверки кода выхода зависит от операционной системы. Например, в скриптах оболочки UNIX переменная `$?' содержит ноль, если последняя команда возвратила код успешного выхода, или же больше нуля, если выполнение программы завершилось с ошибкой.

Если CVS выполняется успешно, то возвращает код успешного завершения; в случае ошибки программа печатает сообщение об ошибке и возвращает код неуспешного завершения. Исключением является команда cvs diff. Она возвращает код успешного завершения, если не обнаружила различий, или же код неудачного завершения, если были обнаружены различия или произошла ошибка. Так как такое поведение не обеспечивает простого способа обнаружения ошибок, в будущем, вероятно, команда cvs diff будет изменена, чтобы вести себя подобно прочим командам CVS.

Когда фиксировать изменения?


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

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

Обычно изменения фиксируются, убедившись, по крайней мере, что они компилируются. В некоторых местах требуют, чтобы файлы прошли серию тестов. Подобную политику можно вести с помощью файла `commitinfo' (see section Файл `commitinfo'), но следует дважды подумать, прежде чем установить такое требование. Чрезмерно увеличив контроль над разработкой, можно добиться отрицательного воздействия на процесс достижения цели, то есть написание работающего продукта.

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

Команда admin: администрирование


Требует: репозиторий, рабочего каталога. Изменяет: репозиторий. Синоним: rcs

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

Если на машине под UNIX существует группа cvsadmin, то команду cvs admin могут выполнять только члены этой группы. Эта группа должна существовать на сервере или на любой машине, на которой используется не-клиент-серверная версия CVS. Чтобы запретить всем пользователям выполнение команды cvs admin, создайте соответствующую группу и никого в неё не помещайте. Под NT группы cvsadmin не поддерживается, поэтому все пользователи могут выполнять cvs admin.

Команда annotate


Команда: cvs annotate [-flR] [-r rev|-D date] files ...

Для каждого файла в списке files, напечатать головную ревизию в стволе, а также информацию о последних изменениях в каждой строке. Например: $ cvs annotate ssfile Annotations for ssfile *************** 1.1 (mary 27-Mar-96): ssfile line 1 1.2 (joe 28-Mar-96): ssfile line 2

В файле `ssfile' в настоящий момент содержит две строки. Строка ssfile line 1 была зафиксирована mary двадцать седьмого марта. Затем, двадцать восьмого, joe добавил строки ssfile line 2, не изменяя строки ssfile line 1. В этом отчете ничего не сказано о том, что было удалено или заменено; используйте cvs diff, чтобы узнать это (see section Команда diff: показать различия между ревизиями).

Ключи команды cvs annotate перечислены в section Краткий справочник по командам CVS, и могут использоваться для выбора файлов и их ревизий, которые нужно аннотировать. Ключи детально описаны в section Стандартные ключи командной строки.

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

Команда checkout: извлечение исходных текстов для редактирования


Краткое описание: `checkout [ключи] модули...' Требует: репозиторий Изменяет: рабочий каталог Синонимы: co, get

Создаёт или обновляет рабочий каталог, содержащий копии файлов с исходными текстами, заданных с помощью параметра модули. Команду checkout обычно следует использовать перед использованием всех прочих команд CVS, так как большинство их них требует наличия рабочего каталога.

модули -- это либо алфавитные имена коллекции каталогов и файлов с исходными текстами, или пути к каталогам и файлам в репозитории. Алфавитные имена описываются в файле `modules'. See section Файл `modules'.

В зависимости от модуля, который вы задали, команда checkout может рекурсивно создавать каталоги и заполнять их соответствующими файлами. Теперь вы можете редактировать эти файлы когда угодно, независимо от того, что кто-то ещё редактирует копии тех же самых файлов); затем обновите их, чтобы получить изменения, помещённые другими в репозиторий; зафиксируйте результаты вашей работы в репозиторий.

Заметьте, что checkout сам создаёт каталоги. В текущем каталоге при выполнении команды checkout образуется каталог верхнего уровня, чьё имя обычно совпадает с именем указанного модуля. В случае псевдонима модуля созданный подкаталог может иметь другое имя, но можно быть уверенным, что это будет именно подкаталог, и что checkout покажет относительный путь, ведущий к каждому файлу, который извлекается в ваш рабочий каталог (если вы не укажете глобальный ключ `-Q').

Команда checkout создаёт файлы с правами на чтение и запись, если не задан глобальный ключ `-r' (see section Глобальные ключи командной строки), не установлена переменная окружения CVSREAD, и за этим файлом не установлено слежение (see section Слежение за чужими исходными текстами).

Заметьте, что допускается также выполнение checkout в каталоге, который был создан другой командой checkout. Это похоже на выполнение команды update с ключом `-d', в том смысле, что в вашем рабочем каталоге появятся новые каталоги, которые были созданы в репозитории. Однако же, команда checkout требует имени модуля, тогда как команда update -- имени каталога. Для использования checkout таким способом её нужно выполнять из каталога верхнего уровня, поэтому прежде чем использовать checkout, чтобы обновить существующий каталог, не забудьте перейти в каталог верхнего уровня.

Сообщения, которые выдаются командой checkout, описаны в section Сообщения команды update.

Команда diff: показать различия между ревизиями


Краткая сводка: diff [-lR] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files...] Требует: рабочий каталог, репозиторий. Ничего не изменяет.

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

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

Смысл кода завершения для команды diff отличается от всех прочих команд; детали описаны в section Код выхода CVS.

Команда export: экспортировать исходные тексты


Краткая сводка: export [-flNnR] [-r rev|-D дата] [-k subst] [-d dir] модуль... Требует: репозиторий. Изменяет: текущий каталог.

Эта команда похожа на команду checkout; её нужно использовать, если вы хотите получить копию исходных текстов модуля без служебных каталогов CVS. Например, команду export можно использовать, чтобы подготовить исходные тексты для передачи вовне. Эта команда требует указания даты или метки (с помощью ключей `-D' или `-r'), чтобы вы могли воспроизвести те же самые файлы, которые вы отдаете.

Часто при использовании cvs export приходится указывать флаг `-kv'. При этом ключевые слова будут развернуты так, чтобы при импорте в другом месте не потерялась информация о ревизиях. Помните, что в этом случае бинарные файлы не будут корректно обрабатываться. Также помните, что после использования флага `-kv' больше нельзя будет использовать команду ident (являющуюся частью пакета RCS), которая ищет строки с ключевыми словами (см. ident(1)). Если вы хотите использовать ident, то не используйте `-kv'.

Команда history: показать состояние файлов и пользователей


Краткая сводка: history [-report] [-flags] [-options args] [files...] Требует: файл `$CVSROOT/CVSROOT/history', иногда репозиторий. Ничего не изменяет.

CVS может вести файл истории, отслеживающий каждое использование команд checkout, commit, rtag, update и release. Для того, чтобы отображать эту информацию в разных форматах, используется команда history.

Журналирование должно быть включено путем создания файла `$CVSROOT/CVSROOT/history'.

Предупреждение: history использует ключи `-f', `-l', `-n' и `-p' не так, как они обычно используются с командами CVS (see section Стандартные ключи командной строки).

Команда import: импортировать исходные тексты


Краткая сводка: import [-options] repository vendortag releasetag... Требует: репозиторий, каталог с исходными текстами. Изменяет: репозиторий.

Используйте import для помещения в ваш репозиторий целого дерева каталогов, полученного из внешнего источника (например, поставщика исходных текстов). Эту команду можно использовать как для начального импорта, так и для глобального обновления модуля из внешнего источника. See section Слежение за чужими исходными текстами, где обсуждается этот вопрос.

Параметр repository задает имя каталога (или путь к каталогу) в корневом каталоге CVS-репозитория; если этот каталог не существует, то CVS создаст его.

Когда вы импортируете с целью обновления дерева каталогов, которое было изменено в вашем репозитории с момента последнего импорта, вас уведомят обо всех файлах, конфликтующих в двух ветвях разработки; как советует import, используйте `checkout -j', чтобы согласовать изменения.

Если CVS решает, что файл нужно игнорировать (see section Игнорирование файлов с помощью cvsignore), то она не импортирует этот файл и печатает `I имя-файла' (see section Сообщения команды output, где полностью описаны сообщения).

Если существует файл `$CVSROOT/CVSROOT/cvswrappers', то файлы, чьи имена совпадают со спецификациями в этом файле, будут считаться packages и над ними перед импортом будут произведены указанные действия. See section Файл `cvswrappers'.

Чужие исходные тексты хранятся на ветке первого уровня, по умолчанию имеющей номер 1.1.1. Обновления являются листьями на этой ветке; например, файлы из первой импортированной коллекции исходников будут иметь ревизию 1.1.1.1, файлы из первого импортированного обновления этой коллекции будут иметь ревизию 1.1.1.2 и т. д.

Команде требуется по крайней мере три параметра. repository требуется, чтобы задать коллекцию исходников. vendortag -- это метка целой ветви (например, 1.1.1). Для того, чтобы идентифицировать файлы, находящиеся на листьях, образующихся при каждом импорте, требуется указать releasetag.

Заметьте, что import не изменяет каталог, в котором вы выполнили эту команду. В частности, этот каталог не становится рабочим каталогом CVS; если вы хотите работать с исходными текстами -- сначала импортируйте их, а затем извлеките в другой каталог (see section Получение исходного кода).

Команда log: напечатать информацию о файлах


Краткая сводка: log [options] [files...] Требует: репозиторий, рабочий каталог. Ничего не изменяет.

Отображает журнальную информацию о файлах. log используется, чтобы вызвать утилиту rlog из комплекта RCS. Although this is no longer true in the current sources, this history determines the format of the output and the options, which are not quite in the style of the other CVS commands.

Команда сообщает о местонахождении RCS-файла, головной ревизии (HEAD) (последней ревизии на стволе, обо всех алфавитных именах меток, а также некоторую другую информацию. Для каждой ревизии печатается её номер, автор, количество удаленных и добавленных строк и журнальное сообщение. Все метки времени отображаются по Гринвичу (в UTC). (Другие части CVS печатают время в местной временн'ой зоне).

Предупреждение: log использует ключ `-R' не так, как это обычно делается в CVS (see section Стандартные ключи командной строки).

Команда rdiff: выдать изменения между версиями в формате patch


Краткая сводка: rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules... Требует: репозиторий. Ничего не изменяет. Синоним: patch.

Создает файл изменений между двумя версиями продукта в формате программы patch(1), написанной Ларри Воллом. Этот файл можно скормить программе patch, чтобы обновить старую версию до новой. (Это одна из немногих команд CVS, которые работают напрямую с репозиторием и не требуют предварительного извлечения исходных текстов.) Результат выдается на стандартный вывод.

Вы можете задать (используя стандартные ключи `-r' и `-D') любую комбинацию двух ревизий или дат. Если указана только одна ревизия или дата, то результат содержит изменения в промежутке между этой ревизией или датой и текущей головной ревизией в RCS-файле.

Заметьте, что если соответствующая версия продукта находится в нескольких каталогах, то может потребоваться указать команде patch при обновлении старых исходников ключ `-p', чтобы patch смогла найти файлы, находящиеся в других каталогах.

Команда release: сообщить, что модуль более не используется


Краткая сводка: release [-d] directories... Требует: рабочий каталог. Изменяет: рабочий каталог, журнал истории.

Эту команду можно использовать, чтобы безопасным образом отменить `cvs checkout'. Так как CVS не блокирует файлы, то использовать эту команду необязательно. Вы всегда можете просто удалить рабочий каталог, если желаете; правда, в этом случае вы рискуете потерять изменения, о которых забыли, а в файле истории (see section Файл history) не остается никаких следов того, что вы отбросили извлеченные исходники.

Команда `cvs release' позволяет избежать этой проблемы. Она проверяет, что в рабочем каталоге нет незафиксированных изменений; что вы выполняете эту команду из каталога, в котором находится рабочий каталог; что репозиторий, из которого был извлечен рабочий каталог, совпадает с репозиторием, описанным в базе данных модулей.

Если все эти условия выполняются, `cvs release' оставляет запись о своем выполнении в журнал истории (удостоверяя, что вы сознательно отложили извлеченные тексты).

Команда update: обновить рабочий каталог из репозитория


Краткая сводка: update [-AdflPpR] [-d] [-r tag|-D date] files... Требует: репозиторий, рабочий каталог. Изменяет: рабочий каталог.

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

Команды commit: поместить файлы в репозиторий


Краткое описание: commit [-lnRf] [-m 'журнальное_сообщение' | -F файл] [-r ревизия] [файлы...] Требует: рабочий каталог, репозиторий. Изменяет: репозиторий. Синоним: `ci'

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

Если вы не укажете, какие файлы следует зафиксировать, то команда проверит все файлы в рабочем каталоге. commit тщательно следит за тем, чтобы помещать в репозиторий только те файл, которые действительно изменились. По умолчанию (или если явно задать ключ `-R') файлы в подкаталогах также обрабатываются и фиксируются, если они были изменены; можно использовать ключ `-l', чтобы ограничить команду commit только текущим каталогом.

commit проверяет, что указанные файлы свежее, чем текущие ревизии в репозитории; если это не так, то команда выдаст предупреждение о необходимости выполнить команду update (see section Команда update: обновить рабочий каталог из репозитория) и завершится, ничего более не делая. commit не станет выполнять за вас команду update, предоставляя вам сделать это в удобное время.

Если все нормально, будет вызван текстовый редактор, в котором можно будет ввести журнальное сообщение, которое будет передано программам журналирования (see section Файл `modules' и see section Файл loginfo), а также помещено в RCS-файл в репозитории. Это журнальное сообщение можно извлечь с помощью команды log, см. section Команда log: напечатать информацию о файлах. Можно задать журнальное сообщение в командной строке с помощью ключа `-m журнальное_сообщение', при этом редактор не будет вызван, или использовать ключ `-F файл', чтобы задать файл, содержащий журнальное сообщение.

Копирование файла с ревизиями


Этот способ также требует прямых изменений репозитория. Он безопасен, но не без подводных камней. # Копировать RCS-файл в репозитории $ cd $CVSROOT/dir $ cp old,v new,v # Удалить старый файл $ cd ~/dir $ rm old $ cvs remove old $ cvs commit old # Удалить все метки из new $ cvs update new $ cvs log new # Запомнить все метки, не являющиеся именами веток $ cvs tag -d tag1 new $ cvs tag -d tag2 new ...

Удалив метки, вы сможете извлекать старые ревизии

Преимущества: Извлечение старых ревизий работает корректно, если вы используете для извлечения ревизий ключ командной строки `-rметка', а не `-Dдата'. Журнал изменений остается в целости и сохранности. Номера ревизий не искажаются.

Недостатки: Нет способа легко увидеть историю файла до переименования.

Краткий справочник по командам CVS


В этом приложении описано, как вызывать CVS, со ссылками на места в руководстве, где детально описана каждая возможность. Дополнительную информацию можно получить, выполнив cvs --help или изучив section Индекс.

Команда CVS выглядит так: cvs [ global_options ] command [ command_options ] [ command_args ]

Глобальные ключи: --allow-root=rootdir Разрешает использование каталога CVSROOT (только для сервера) (не реализовано в CVS 1.9 и ранее). См. section Настройка сервера для парольной аутентификации. -a Аутентифицировать все взаимодействие (только для клиента) (не реализовано в CVS 1.9 и ранее). См. section Глобальные ключи командной строки. -b Задает местонахождение программ RCS (CVS 1.9 и ранее). См. section Глобальные ключи командной строки. -d root Задает CVSROOT. См. section Репозиторий. -e редактор Редактировать сообщение с помощью редактора. См. section Фиксирование изменений. -f Не читать файл `~/.cvsrc'. См. section Глобальные ключи командной строки. -H --help Выдает справочное сообщение. См. section Глобальные ключи командной строки. -l Не журналировать команду в файле `CVSROOT/history'. См. section Глобальные ключи командной строки. -n Не изменять файлы на диске. См. section Глобальные ключи командной строки. -Q Совсем не выдавать сообщений. См. section Глобальные ключи командной строки. -q Почти совсем не выдавать сообщений. См. section Глобальные ключи командной строки. -r Создавать новые рабочие файлы в режиме "только для чтения". См. section Глобальные ключи командной строки. -s variable=value Установить пользовательскую переменную. См. section Подстановки в административных файлах. -T tempdir Создавать временные файлы в каталоге tempdir. См. section Глобальные ключи командной строки. -t Отслеживать ход выполнения CVS. См. section Глобальные ключи командной строки. -v --version Напечатать информацию об версии программы CVS и авторских правах. -w Создавать новые рабочие файлы в режиме для чтения и записи. См. section Глобальные ключи командной строки. -x Шифровать все переговоры с сервером (только для клиента).
См. section Глобальные ключи командной строки. -z gzip-level Установить коэффициент сжатия (только для клиента). Режимы подстановки ключевых слов (see section Режимы подстановки): -kkv $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $ -kkvl $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ -kk $Id$ -kv file1,v 1.1 1993/12/09 03:21:13 joe Exp -ko не подставлять - kb не подставлять, файл является двоичным Ключевые слова (see section Список ключевых слов): $Author: joe $ $Date: 1993/12/09 03:21:13 $ $Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $Locker: harry $ $Name: snapshot_1_14 $ $RCSfile: file1,v $ $Revision: 1.1 $ $Source: /home/files/file1,v $ $State: Exp $ $Log: file1,v $ Revision 1.1 1993/12/09 03:30:17 joe Initial revision Команды, их ключи и параметры: @macro short-option-a -a actions Задает действия, за которыми нужно следить. actions может быть edit, unedit, commit, all или none. См. section Как редактировать файлы, за которыми наблюдают?. @macro short-option-f -f Использовать головную ревизию (HEAD), если не найдено указанной метки или даты. См. section Стандартные ключи командной строки. @macro short-option-k -k kflag Задать режим подстановки ключевых слов. См. section Подстановка ключевых слов. @macro short-option-l -l Работать только в текущем каталоге. See section Рекурсивное поведение. @macro short-option-N -N Не обрезать пути к модулям, если задан ключ `-d'. См. section Ключи команды checkout. @macro short-option-R -R Рекурсивно обходить дерево каталогов (по умолчанию это именно так). See section Рекурсивное поведение. add [options] [files...] Добавить новый файл или каталог. См. section Добавление файлов в каталог. @short-option-k -m msg Задать описание файла. admin [options] [files...] Административные функции файлов истории версий в репозитории. См. section Команда admin: администрирование. -b[rev] Установить ветку по умолчанию. См. section Возврат к последней версии от поставщика. -cstring Задать префикс комментария. @short-option-k -l[rev] Блокировать ревизию rev или последнюю ревизию. -mrev:msg Заменить журнальную запись ревизии rev сообщением msg. -orange Удалить ревизии из репозитория.


См. section Ключи команды admin. -q Выполнять команды, не выдавая сообщений. -sstate[:rev] Установить состояние ревизии. -t Получить описание файла со стандартного ввода. -tfile Получить описание файла из file. -t-string Установить описание файла в string. -u[rev] Разблокировать ревизию rev или последнюю ревизию. annotate [options] [files...] Для каждой строки показать последнюю ревизию, когда она была изменена. См. section Команда annotate. -D date Аннотировать самую последнюю ревизию, созданную не позже date. См. section Стандартные ключи командной строки. @short-option-f @short-option-l @short-option-R -r tag Аннотировать ревизию tag. См. section Стандартные ключи командной строки. checkout [options] modules... Извлечь копию исходных текстов. См. section Команда checkout: извлечение исходных текстов для редактирования. -A Очистить все прилипшие метки, даты и ключи. См. section Липкие метки и section Подстановка ключевых слов. -c Напечатать содержимое базы данных модулей. См. section Ключи команды checkout. -D date Извлечь ревизии, датированные date (это липкий ключ). См. section Стандартные ключи командной строки. -d dir Извлекать в каталог dir. См. section Ключи команды checkout. @short-option-f -j rev Слить изменения. См. section Ключи команды checkout. -k kflag Использовать режим подстановки ключевых слов kflag. См. section Режимы подстановки. @short-option-l @short-option-N -n Не выполнять никаких программ. См. section Ключи команды checkout. -P Удалять пустые каталоги. См. section Перемещение и переименование каталогов. -p Извлекая файлы, печатать их в стандартный вывод (избегая липкости). См. section Ключи команды checkout. @short-option-R -r tag Извлечь ревизию tag (ключ липкий). См. section Стандартные ключи командной строки. -s Похоже на `-c', но выдает также статус модуля. См. section Ключи команды checkout. commit [options] [files...] Помещает изменения в репозиторий. См. section Команды commit: поместить файлы в репозиторий. -F файл Читает журнальное сообщение из файла. См. section Ключи команды commit. -f Принудительно фиксирует файл; запрещает рекурсию.


См. section Ключи команды commit. @short-option-l -m msg Использовать msg в качестве журнального сообщения. См. section Ключи команды commit. -n Не выполнять программ. См. section Ключи команды commit. @short-option-R -r rev Фиксировать в ревизию rev. См. section Ключи команды commit. diff [options] [files...] Показывает изменения между ревизиями. См. section Команда diff: показать различия между ревизиями. Вдобавок к нижеуказанным поддерживает множество ключей, управляющих форматом выдачи, например, `-c' для создания контекстных файлов изменений. -D date1 Выдать изменения от ревизии, датированной date1, до рабочего файла. См. section Ключи команды diff. -D date2 Выдать изменения от rev1 или date1 до date2. См. section Ключи команды diff. @short-option-l -N Включает изменения для добавленных и удаленных файлов. См. section Ключи команды diff. @short-option-R -r rev1 Выдать изменения от rev1 до рабочего файла. См. section Ключи команды diff. -r rev2 Выдать изменения от rev1 или date1 до rev2. См. section Ключи команды diff. edit [options] [files...] Приготовиться к редактированию файла, за которым ведется наблюдение. См. section Как редактировать файлы, за которыми наблюдают?. @short-option-a @short-option-l @short-option-R editors [options] [files...] Посмотреть, кто редактирует файл, за которым ведется наблюдение. section Информация о том, кто следит и кто редактирует. @short-option-l @short-option-R export [options] modules... Экспортировать файлы из CVS. См. section Команда export: экспортировать исходные тексты. -D date Извлечь ревизии, датированные date. См. section Стандартные ключи командной строки. -d dir Извлекать в каталог dir. См. section Ключи команды export. @short-option-f @short-option-k @short-option-l @short-option-N -n Не выполнять программ перед извлечением. См. section Ключи команды export. -P Удалять пустые каталоги. См. section Перемещение и переименование каталогов. @short-option-R -r tag Извлечь ревизию tag (липкий ключ). См. section Стандартные ключи командной строки. history [options] [files...] Показать историю обращений к репозиторию.


См. section Команда history: показать состояние файлов и пользователей. -a Показать информацию обо всех пользователях (по умолчанию --- только о себе). См. section Ключи команды history. -b str Показывать до записи с вхождением строки str в имя модуля, файла или репозитория. См. section Ключи команды history. -c Сообщать о зафиксированных (измененных) файлах. См. section Ключи команды history. -D date Сообщать о событиях, начиная с date. См. section Ключи команды history. -e Сообщать о всех типах записей. См. section Ключи команды history. -l Last modified (committed or modified report). См. section Ключи команды history. -m module Сообщать о модуле module (ключ можно задать несколько раз). См. section Ключи команды history. -n module Сообщать об изменениях в модуле module. См. section Ключи команды history. -o Сообщать об извлеченных модулях. См. section Ключи команды history. -r rev Сообщать об изменениях, начиная с ревизии rev. См. section Ключи команды history. -T Produce report on all TAGs. См. section Ключи команды history. -t tag Сообщать об изменениях, сделанных с момента, когда была создана метка tag. См. section Ключи команды history. -u user Сообщать об изменениях, сделанных пользователем user (ключ можно задать несколько раз). См. section Ключи команды history. -w Рабочие каталоги должны совпадать. См. section Ключи команды history. -x types Сообщать о типах событий types, обозначаемых буквами TOEFWUCGMAR. См. section Ключи команды history. -z zone Использовать временн'ую зону zone. См. section Ключи команды history. import [options] repository vendor-tag release-tags... Импортировать файлы в CVS, используя ветки поставщика. См. section Команда import: импортировать исходные тексты. -b bra Импортировать на ветку поставщика bra. См. section Несколько веток поставщика. -d Использовать время модификации файла в качестве времени импорта. См. section Ключи команды import. @short-option-k -k kflag Задать режим подстановки ключевых слов, действующий по умолчанию. См. section Ключи команды import. -m msg Использовать msg в качестве журнального сообщения.


См. section Ключи команды import. -I ign Список файлов, которые нужно игнорировать (`!' очищает этот список). См. section Ключи команды import. -W spec Дополнительные обертки. См. section Ключи команды import. init Создать репозиторий CVS, если он еще не существует. См. section Создание репозитория. log [options] [files...] Напечатать информацию об истории файлов. См. section Команда log: напечатать информацию о файлах. -b Выдавать информацию только о ревизиях на ветви по умолчанию. См. section Ключи команды log. -d dates Задает даты (d1d2 означает диапазон, d -- не позже). См. section Ключи команды log. -h Печатать только заголовок. См. section Ключи команды log. @short-option-l -N Не выдавать имена меток. См. section Ключи команды log. -R Печатать только имя RCS-файла. См. section Ключи команды log. -rrevs Печатать только информацию о ревизиях revs. См. section Ключи команды log. -s states Печатать только информацию о ревизиях, находящихся в указанных состояниях. См. section Ключи команды log. -t Печатать только заголовок и текст описания. См. section Ключи команды log. -wlogins Только о ревизиях, созданных указанными пользователями. См. section Ключи команды log. login Ввести пароль для аутентификации на сервере. См. section Использование клиента с парольной аутентификацией. logout Удалить сохраненный пароль на сервер. См. section Использование клиента с парольной аутентификацией. rdiff [options] modules... Показать различия между версиями. См. section Команда rdiff: выдать изменения между версиями в формате patch. -c Контекстный формат выдачи изменений (по умолчанию). См. section Ключи команды rdiff -D date Выбрать ревизии, созданные в date. См. section Стандартные ключи командной строки. @short-option-f @short-option-l @short-option-R -r rev Выбрать ревизии rev. См. section Стандартные ключи командной строки. -s Короткая заплатка -- одна строка на файл. См. section Ключи команды rdiff. -t Последнее изменение, сделанное в файле. См. section Ключи команды diff. -u Унифицированный формат выдачи изменений. См.


section Ключи команды rdiff -V vers Использовать RCS версии vers для подстановки ключевых слов (устарело). См. section Ключи команды rdiff. release [options] directory Указывает, что каталог больше не используется. См. section Команда release: сообщить, что модуль более не используется. -d Удалить указанный каталог. См. section Ключи команды release remove [options] [files...] Удаляет файл из репозитория. См. section Удаление файлов. -f Удалить файл в рабочем каталоге перед удалением из репозитория. См. section Удаление файлов. @short-option-l @short-option-R rtag [options] tag modules... Пометить набор ревизий в модуле. См. section Ревизии и section Создание ветвей и слияние. -a Убрать метку с удаленных файлов, которые в противном случае не были бы помечены. См. section Пометки при добавлении и удалении файлов. -b tag Создать ветку tag. См. section Создание ветвей и слияние. -D date Пометить ревизии, датированные date. См. section Как помечать по дате или ревизии. -d tag Удалить метку tag. См. section Удаление, перемещение и удаление меток. -F Переместить метку tag, если она уже существует. См. section Удаление, перемещение и удаление меток. -f Использовать головную ревизию (HEAD), если не найдена метка или дата. См. section Как помечать по дате или ревизии. @short-option-l -n Не выполнять программ при создании меток. См. section Стандартные ключи командной строки. @short-option-R -r rev Пометить существующую метку rev. См. section Как помечать по дате или ревизии. status [options] files... Напечатать информацию о статусе файлов в рабочем каталоге. См. section Статус файла. @short-option-l @short-option-R -v Сообщить также информацию о метках в файле. См. section Метки ревизий. tag [options] tag [files...] Пометить извлеченные версии файлов. См. section Ревизии и section Создание ветвей и слияние. -b Создать ветку tag. См. section Создание ветвей и слияние. -c Проверить, что рабочие файлы не изменялись. См. section Что пометить в рабочем каталоге. -D date Пометить ревизии, датированные date. См. section Как помечать по дате или ревизии. -d Удалить метку tag.


См. section Удаление, перемещение и удаление меток. -F Переместить метку tag, если она уже существует. См. section Удаление, перемещение и удаление меток. -f Использовать головную ревизию (HEAD), если не найдена метка или дата. См. section Как помечать по дате или ревизии. @short-option-l @short-option-R -r rev Пометить существующую метку rev. См. section Как помечать по дате или ревизии. unedit [options] [files...] Отменить команду `edit'. См. section Как редактировать файлы, за которыми наблюдают?. @short-option-a @short-option-l @short-option-R update [options] [files...] Обновить рабочее дерево каталогов из репозитория. См. section Команда update: обновить рабочий каталог из репозитория. -A Очистить прилипшие метки, даты и ключи. См. section Липкие метки и section Подстановка ключевых слов. -D date Извлекать ревизии, датированные date (ключ является липким). См. section Стандартные ключи командной строки. -d Создавать каталоги. См. section Ключи команды update @short-option-f -I ign Добавить файлы в список игнорируемых (`!' очищает этот список). См. section Ключи команды import. -j rev Объединить изменения. См. section Ключи команды update -k kflag Использовать режим подстановки ключевых слов kflag. См. section Режимы подстановки. @short-option-l -P Удалять пустые каталоги. См. section Перемещение и переименование каталогов. -p Извлекать файлы на стандартный вывод (избежав липкости). См. section Ключи команды update @short-option-R -r tag Извлечь ревизию tag (ключ липкий). См. section Стандартные ключи командной строки. -W spec Добавить обертку. См. section Ключи команды import watch [on|off|add|remove] [options] [files...] on/off: включить/выключить извлечение файлов только для чтения. См. section Как с помощью CVS следить за определенными файлами?. add/remove: добавить или удалить уведомление о производимых действиях. См. section CVS может посылать вам уведомления. @short-option-a @short-option-l @short-option-R watchers [options] [files...] Вывести список следящих за файлом. См. section Информация о том, кто следит и кто редактирует. @short-option-l @short-option-R Go to the first, previous, next, last section, table of contents.

Липкие метки


Иногда ревизия, находящаяся в рабочем каталоге, содержит также дополнительную информацию о себе: например, она может находиться на ветке (see section Создание ветвей и слияние), или же может быть ограничена с помощью `checkout -D' или `update -D' версиями, созданными ранее указанной даты. Так как эта информация сохраняется долговременно, то есть действует на последующие команды над рабочей копией, то мы называем ее липкой.

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

Можно использовать команду status, чтобы посмотреть, какие установлены липкие метки или даты: $ cvs status driver.c =================================================================== File: driver.c Status: Up-to-date Version: 1.7.2.1 Sat Dec 5 19:35:03 1992 RCS Version: 1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v Sticky Tag: rel-1-0-patches (branch: 1.7.2) Sticky Date: (none) Sticky Options: (none)

Липкие метки остаются на ваших рабочих файлах до тех пор, пока вы не удалите их с помощью `cvs update -A'. Опция `-A' извлекает версию файла из головной ревизии ствола и забывает обо всех липких метках, датах и ключах командной строки.

Самое распространенное использование липких меток -- указать, над какой ветвью идет работа, что описано в section Доступ к веткам. Однако, липкие метки также используются и без веток. Предположим, например, что вы хотите избежать обновления вашего рабочего каталога, чтобы защититься от изменений, которые делают ваши коллеги. Вы, конечно, можете просто не выполнять команду cvs update. Если же вы хотите избежать обновления только части большого дерева, то липкие метки могут помочь. Если вы извлечете определенную ревизию, скажем, 1.4, то она станет липкой. Последующие команды cvs update не станут извлекать последнюю ревизию до тех пор, пока вы не очистите метку с помощью cvs update -A. Точно так же, использование ключа командной строки `-D' команд update и checkout задает липкую дату, которая используется для будущих извлечений.

Люди часто хотят извлечь старую версию файла без установки липкой метки. Это можно сделать с помощью ключа командной строки `-p' команд checkout или update, которая посылает содержимое файла на стандартный вывод. Например: $ cvs update -p -r 1.1 file1 >file1 =================================================================== Checking out file1 RCS: /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v VERS: 1.1 *************** $

Однако, это не самый простой способ, если вы спрашиваете, как отменить последнее фиксирование (в этом примере -- поместить `file1' обратно в то состояние, в котором он был в ревизии 1.1). В этом случае лучше будет использовать ключ командной строки `-j' команды update; дальнейшее обсуждение находится в section Слияние изменений между двумя ревизиями.

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

Метки ревизий


Номера ревизий живут своей собственной жизнью. Они могут совершенно никак не соотноситься с номером версии вашего программного продукта. В зависимости от того, как вы используете CVS, номера ревизий могут измениться несколько раз между двумя выпусками продукта. Например, файлы с исходными текстами RCS 5.6 имеют такие номера ревизий: ci.c 5.21 co.c 5.9 ident.c 5.3 rcs.c 5.12 rcsbase.h 5.11 rcsdiff.c 5.10 rcsedit.c 5.11 rcsfcmp.c 5.9 rcsgen.c 5.10 rcslex.c 5.11 rcsmap.c 5.2 rcsutil.c 5.10

Вы можете использовать команду tag, чтобы задать буквенное имя определенной ревизии файла. Вы можете использовать ключ командной строки `-v' команды status, чтобы увидеть все метки, которые имеет файл, а также какие номера ревизий они представляют. Имена меток должны начинаться с буквы и могут содержать буквы, цифры и знаки `-' и `_'. Два имени меток BASE и HEAD зарезервированы для использования в CVS. Предполагается, что будущие зарезервированные имена будут иметь специальный вид, например, начинаться с символа `.', чтобы избежать конфликтов с действительными именами меток.

Вы захотите выбрать какое-либо соглашение об именах меток, основываясь, например, на имени программы и номере ее версии. Например, можно взять имя программы, за которым следует номер версии, в котором символ `.' заменен на `-', так что CVS 1.9 будет помечен как cvs1-9. Если вы выберете стабильные правила именования, вам не придется постоянно угадывать, называется ли метка cvs-1-9, cvs1_9 или как-то еще. Вы можете даже принудительно задать эти правила именования в файле `taginfo' (see section Настройка журналирования).

В нижеследующем примере показано, как добавить метку к файлу. Команды должны выполняться внутри вашего рабочего каталога, то есть там, где находится файл `backend.c'. $ cvs tag rel-0-4 backend.c T backend.c $ cvs status -v backend.c =================================================================== File: backend.c Status: Up-to-date Version: 1.4 Tue Dec 1 14:39:01 1992 RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-0-4 (revision: 1.4)

Полный синтаксис команды cvs tag, включая разнообразные ключи командной строки, описан в section Краткий справочник по командам CVS.

Редко требуется помечать одиночные файлы.
Гораздо чаще нужно пометить все файлы, составляющие модуль, в стратегической точке цикла разработки, например, когда выпущена новая версия. $ cvs tag rel-1-0 . cvs tag: Tagging . T Makefile T backend.c T driver.c T frontend.c T parser.c (Если вы дадите CVS каталог в качестве параметра командной строки, она обычно оперирует над всеми файлами в этом каталоге и, рекурсивно, ко всем подкаталогам, которые тот содержит. See section Рекурсивное поведение.) Команда checkout имеет ключ командной строки `-r', позволяющий извлечь определенную ревизию модуля. Этот флаг упрощает извлечение исходного текста, из которого сделана версия 1.0 модуля `tc' в когда-нибудь в будущем. $ cvs checkout -r rel-1-0 tc Это полезно, например, если кто-то заявляет, что в той версии была ошибка, но вы не можете найти ее в текущей рабочей копии. Вы можете также извлечь модуль по состоянию на любую дату. See section Ключи команды checkout. Задав команде checkout ключ командной строки `-r', следует остерегаться липких меток; см. section Липкие метки. Когда вы помечаете более одного файла, вы можете думать о метке как о кривой, проведенной по таблице имен файлов и их номеров ревизий. Скажем, у нас есть пять файлов со следующими ревизиями: file1 file2 file3 file4 file5 1.1 1.1 1.1 1.1 /--1.1* Когда-то в прошлом, ревизии, отмеченные звездочками, были помечены. Вы можете думать о метке, как о ручке, приделанной к кривой, нарисованной на помеченных ревизиях. Когда вы тянете за ручку, вы получаете все помеченные ревизии. Еще одним способом представления является прямая линия, вдоль которой вы смотрите на набор файлов, и вдоль которой выровнены помеченные ревизии, например: file1 file2 file3 file4 file5 1.1 1.2 1.1 1.3 _ 1.1 1.2 1.4 1.1 / 1.2*----1.3*----1.5*----1.2*----1.1 (---