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

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

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

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


Руководство по командам CVS

В этом приложении описывается общая структура команд CVS, а некоторые команды описываются детально; краткий справочник по командам CVS находится в see section Краткий справочник по командам CVS.

Общая структура команд CVS

Общий формат всех команд CVS таков:

cvs [ опции_cvs ] команда_cvs [ опции_команды ] [ аргументы_команды ]
cvs
Имя исполняемого файла CVS.
cvs_options
Некоторые ключи командной строки влияют на все подкоманды CVS. Такие ключи описаны ниже.
cvs_command
Одна из нескольких подкоманд. Некоторые команды имеют синонимы, которые указываются в справочнике по этой команде. Есть только две ситуации, в которых вы можете пропустить `команду_cvs’: `cvs -H’ выдает список доступных команд, а `cvs -v’ отображает версию CVS.
command_options
Ключи командной строки, специфичные для каждой команды.
command_args
Аргументы команд.

К сожалению, есть небольшая путаница между опциями_cvs и опциями_команды. Ключ `-l’, когда он используется в качестве опции CVS, воздействует только на некоторые команды. Когда этот ключ используется как опция команды, у него появляется другое значение, и он используется с б’ольшим количеством команд. Другими словами, не придавайте вышеописанной категоризации слишком большого значения, а обращайтесь вместо этого к документации.

Код выхода CVS

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

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

Ключи по умолчанию и файл ~/.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 (те из них, что задаются слева от имени команды):

–allow-root=rootdir
Задает разрешенный каталог CVSROOT. См. section Настройка сервера для парольной аутентификации.
-a
Аутентифицировать всё общение между клиентом и сервером. Влияет только на клиента. В настоящее время это реализуется только при использовании соединения GSSAPI (see section Прямое соединение с использованием GSSAPI). Аутентификация предотвращает определённые виды атак, использующих перехват TCP-соединения. Включение аутентификации не включает шифрование.
-b bindir
В @cvsver{1.9.18} и более старых версиях этот ключ задавал каталог, в котором находятся программы RCS. Текущие версии CVS не выполняют программ RCS; этот ключ оставлен только для обратной совместимости.
-T tempdir
Использовать tempdir в качестве каталога, в котором расположены временные файлы. Переопределяет содержимое переменной среды $TMPDIR и каталог, заданный при компиляции. Этот параметр должен задавать полный путь.
-d cvs_root_directory
Использовать cvs_root_directory в качестве корневого каталога репозитория. Переопределяет содержимое переменной окружения $CVSROOT. See section Репозиторий.
-e editor
Использовать editor, чтобы ввести журнальное сообщение. Переопределяет содержимое переменных окружения $CVSEDITOR и $EDITOR. За дальнейшей информацией обращайтесь к section Фиксирование изменений.
-f
Не читать файл `~/.cvsrc’. Этот ключ чаще всего используется из-за неортогональности набора ключей CVS. Например, команда `cvs log’ имеет ключ `-N’ (отключить отображение имен меток), но не имеет соответствующего ключа, чтобы включить такое отображение. Поэтому если у вас в файле `~/.cvsrc’ для команды `log’ имеется ключ `-N’, вам может потребоваться `-f’, чтобы отобразить имена меток.
-H
–help
Выдать информацию об указанной команде CVS (но не выполнять её). Если вы не укажете имя команды, то `cvs -H’ выдаёт общую информацию об использовании CVS, включая список других ключей помощи.
-l
Выполнить команду, не журналируя её в файле истории команд. See section Команда history: показать состояние файлов и пользователей.
-n
Не изменять ничего на диске. Попытаться выполнить команду CVS, но только выдавать отчёт; не удалять, обновлять или объединять существующие файлы, не создавать новых. Заметьте, что CVS не обязательно выдаст те же самые сообщения, что и без использования `-n’, потому что в некоторых случаях CVS пропустит часть работы.
-Q
Команда вообще не будет выдавать сообщений, за исключением сообщений о серьезных проблемах.
-q
Команда будет выдавать только некоторые сообщения; например, информация о продвижении по дереву каталогов выдаваться не будет.
-r
Делать новые рабочие файлы доступными только для чтения. Тот же самый эффект достигается установкой переменной окружения $CVSREAD (see section Все переменные окружения, используемые в CVS). По умолчанию рабочие файлы создаются доступными для записи, если только не включено слежение (see section Слежение за чужими исходными текстами).
-s variable=value
Установить переменную пользователя (see section Подстановки в административных файлах).
-t
Отслеживать выполнение программы; отображать сообщения, сопровождающие различные шаги CVS. Особенно полезно совместно с `-n’, чтобы изучить работу незнакомой команды.
-v
–version
Отображает версию CVS и информацию об авторских правах.
-w
Делает новые рабочие файлы доступными для чтения и записи. Переопределяет содержимое переменной окружения $CVSREAD. Файлы по умолчанию создаются для чтения и записи, если только не был установлен $CVSREAD или же не использовался ключ `-r’.
-x
Шифровать всё взаимодействие между клиентом и сервером. Воздействует только на клиента CVS. В текущей версии реализовано только при использовании соединения с GSSAPI (see section Прямое соединение с использованием GSSAPI) или соединения с Kerberos (see section Прямое соединение с помощью Kerberos). Включение шифрования подразумевает, что в канале связи будет также включена аутентификация. Поддержка шифрования по умолчанию недоступна; при компиляции CVS используйте специальный ключ командной строки к ./configure –enable-encryption.
-z gzip-level
Установить уровень компрессии. Влияет только на клиента CVS.

Стандартные ключи командной строки

В этой главе описываются `ключи_команды’, доступные для использования с несколькими командами CVS. Эти ключи всегда задаются справа от имени `команды_CVS’. Не все команды поддерживают эти ключи, но лишь те, для которых ключ имеет смысл. Однако, если команда имеет один из этих ключей, вы можете быть уверены в одинаковом поведении этих ключей с разными командами. (Другие ключи команд, описанные вместе с отдельными командами, могут иметь различное поведение с разными командами CVS).

Предупреждение: команда `history’ является исключением, она поддерживает различные ключи, конфликтующие даже со стандартными ключами.

@macro std-option-f

  • -f Если не найдено совпадающей ревизии, извлечь самую свежую ревизию (а не игнорировать файл). @macro std-option-l
  • -l Не обходить дерево каталогов, работать только в текущем рабочем каталоге. @macro std-option-R{verb}
  • -R \verb\ каталоги рекурсивно. По умолчанию это именно так. См. section Рекурсивное поведение. @macro std-option-A
  • -A Очистить все прилипшие метки, даты и ключи. См. section Липкие метки, а также section Подстановка ключевых слов.
    -D дата
    Использовать самую свежую ревизию, сделанную не позже чем дата. В данном случае дата – это одиночный аргумент, являющийся описанием прошедшей даты. Указанная дата становится липкой, когда вы используете её, чтобы сделать копию файла с исходным текстом, то есть, когда вы извлекаете рабочий файл, используя `-D’, то CVS запоминает указанную дату, так что последующие команды обновления, выполненные в том же каталоге, будут использовать ту же дату (дальнейшая информация по липким меткам и датам находится в see section Липкие метки). Ключ `-D’ доступен совместно с командами checkout, diff, export, history, rdiff, rtag и update. (Команда history использует этот ключ немного отличающимся способом; see section Ключи команды history). CVS поддерживает большое множество форматов даты. Самыми стандартными являются ISO-8601 (от Международной Организации по Стандартизации) и стандарт электронной почты (описанные в RFC822, с поправками в RFC1123). Даты в формате ISO-8601 имеют множество вариантов, но вот несколько примеров:
    1972-09-24
    1972-09-24 20:05
    
    Вероятно, вы совсем не желаете увидеть перечисление полного списка форматов, описанных в ISO8601 :-). Вдобавок к датам, разрешенным в электронной почте в Интернет, CVS также позволяет пропускать некоторые поля. Например:
    24 Sep 1972 20:05
    24 Sep
    
    Считается, что дата находится в местной временн’ой зоне, если только таковая не задана явно. Предпочтительными являются два формата представления данных. Однако же, CVS в настоящее время поддерживает широкий диапазон других форматов представления даты. Они нарочно не документируются здесь, а будущие версии CVS могут уже не поддерживать их. Одним из таких форматов является месяц/день/год. Такой взаимный порядок дня и месяца может смутить некоторых, например, `1/4/96’ — это четвертое января, а не первое апреля. Не забудьте написать аргумент команды `-D’ в кавычках, чтобы ваша оболочка не посчитала пробелы разделителями аргументов. Команда, использующая ключ `-D’, может выглядеть так:
    $ cvs diff -D “1 hour ago” cvs.texinfo
    
    -f
    Когда вы задаёте команде CVS конкретную дату или метку, то эта команда обычно игнорирует файлы, не содержащие заданной метки (или не существовавшие на указанный момент времени). Используйте ключ `-f’, если вы хотите, чтобы файлы извлекались, даже если они не совпадают с меткой или со временем, в этом случае будет использована самая свежая ревизия файла. `-f’ доступна с командами annotate, checkout, export, rdiff, rtag, и update. Предупреждение: Команды commit и remove также имеют ключ `-f’, но он имеет другое поведение. See section Ключи команды commit, а также section Удаление файлов.
    -k kflag
    Изменить обработку ключевых слов по умолчанию. See section Подстановка ключевых слов, о значении kflag. Указанное значение kflag становится липким, когда вы создаёте личную копию файла. Это означает, что когда вы используете этот ключ вместе с командами checkout или update, то CVS связывает значение kflag с файлом, и использует это значение при последующих командах обновления этого файла, если вы не укажете обратного. Ключ `-k’ доступен с командами add, checkout, diff, import и update. @std-option-l Предупреждение: это не тот глобальный ключ `-l’, который вы указываете слева от команды CVS! Доступен с командами annotate, checkout, commit, diff, edit, editors, export, log, rdiff, remove, rtag, status, tag, unedit, update, watch, и watchers.
    -m “сообщение”
    Использовать “сообщение” в качестве журнальной записи, вместо того, чтобы запустить редактор. Флаг доступен с командами add, commit и import.
    -n
    Не выполнять соответствующие программы при выполнении команд `checkout’, `commit’ и `tag’. (В базе данных модулей могут быть указаны программы, которые нужно выполнить при выполнении одной из этих команд, а этот ключ используется для того, чтобы избежать этого). Предупреждение: этот флаг – не тот глобальный флаг `cvs -n’, который задаётся слева от команды CVS! Флаг доступен с командами checkout, commit, export и rtag.
    -P
    Удалять пустые каталоги. См. section Удаление каталогов.
    -p
    Выдать файлы, извлеченные из репозитория, на стандартный вывод, а не записывать их в текущем каталоге. Флаг доступен с командами checkout и update.
    -R
    Рекурсивно обрабатывать каталоги. Включено по умолчанию. Доступно с командами annotate, checkout, commit, diff, edit, editors, export, rdiff, remove, rtag, status, tag, unedit, update, watch и watchers.
    -r метка
    Использовать ревизию, указанную в параметре метка, вместо головной ревизии (HEAD) по умолчанию. Помимо меток, созданных с помощью команд tag и rtag, всегда доступны две специальные метки: `HEAD’ ссылается на самую свежую ревизию, находящуюся в репозитории, а `BASE’ ссылается на ревизию, которую вы извлекли в текущий рабочий каталог. Указанная метка становится липкой, если вы используете checkout или update, чтобы создать собственную копию файла: CVS запоминает метку и продолжает использовать её при дальнейших командах обновления, пока вы не укажете обратного (See section Липкие метки, где можно найти дополнительную информацию о о липких метках/датах). Метка может быть номером ревизии или именем. See section Метки ревизий. Задание глобального ключа `-q’ вместе с ключом `-r’ часто бывает полезным, чтобы избежать предупреждающих сообщений о том, что RCS-файл не содержит указанной метки. Предупреждение: не перепутайте этот ключ с глобальным ключом `cvs -r’, который вы пишете слева от команды CVS! Ключ `-r’ доступен с командами checkout, commit, diff, history, export, rdiff, rtag и update.
    -W spec
    Задаёт имена файлов, которые нужно отфильтровать. Этот ключ можно использовать в командной строке несколько раз. spec может быть шаблоном имени файла, таким же, который можно использовать в файле `.cvswrappers’. Ключ доступен с командами import и update.

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

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

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

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

    Ключи команды 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 нельзя задавать в виде алфавитного имени, если эта ревизия находится на ветке. See 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 [ключи] модули…’
    • Требует: репозиторий
    • Изменяет: рабочий каталог
    • Синонимы: 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.

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

    Команда checkout поддерживает стандартные ключи, описанные в (See section Стандартные ключи командной строки.):

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

    Вдобавок к этому, можно использовать следующие ключи команды checkout:

    @std-option-A
    -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’ статуса модуля.

    Пример использования команды `checkout’

    Получить копию модуля `tc’:

    $ cvs checkout tc
    

    Получить копию модуля `tc’ в том виде, в котором он находился вчера:

    $ cvs checkout -D yesterday tc
    

    Команды 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 файл, чтобы задать файл, содержащий журнальное сообщение.

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

    Следующие стандартные ключи (see 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 сообщение
    Использовать сообщение в качестве журнального сообщения, не вызывать редактор.

    Пример использования команды commit

    Помещение изменений на ветку

    Вы можете зафиксировать изменения в ревизию, находящуюся на ветке (в её номере четное количество точек) с помощью ключа `-r’. Для того, чтобы создать ревизию на ветке, используйте ключ `-b’ команд rtag и tag (see section Создание ветвей и слияние). Затем используйте checkout или update, чтобы ваши исходные тексты стали основаны на этой свежесозданной ветке. Начиная с этого момента все изменения в этом рабочем каталоге автоматически добавляются в ревизию на ветке, никак не мешая разработке в основном стволе. Например, если вам потребовалось создать исправление к версии 1.2 вашего продукта, несмотря на то, что уже разрабатывается версия 2.0, вы можете:

    $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
    $ cvs checkout -r FCS1_2_Patch product_module
    $ cd product_module
    [[ hack away ]]
    $ cvs commit
    

    Все это будет работать автоматически, потому что ключ `-r’ является липким.

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

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

    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs update -r EXPR1
    $ cvs commit
    

    После команды update ключ `-r EXPR1’ прилипнет ко всем файлам. Заметьте, что ваши изменения в файлах никогда не будут удалены командой update. Команда commit автоматически поместит изменения на правильную ветку, потому что ключ `-r’ является липким. Вы также можете сделать так:

    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs commit -r EXPR1
    

    но в этом случае только те файлы, которые вы изменили, будут иметь прилепленный флаг `-r EXPR1’. Если вы поредактируете еще какие-либо файлы и зафиксируете их без указания флага `-r EXPR1’, то эти файлы могут случайно оказаться в главном стволе.

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

    $ cvs checkout -r EXPR1 whatever_module
    

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

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

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

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

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

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

    Команда checkout поддерживает стандартные ключи, описанные в See 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
    

    Примеры использования команды diff

    Нижеследующая строка выдает унифицированную (с ключом `-u’) разницу между ревизиями 1.14 и 1.19 файла `backend.c’. Из-за наличия флага `-kk’ ключевые слова не подставляются, поэтому различия внутри ключевых слов игнорируются.

    $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
    

    Предположим, что экспериментальная ветка `EXPR1’ была основана на наборе файлов, помеченных как `RELEASE_1_0’. Чтобы увидеть, что произошло на этой ветке, используйте команду

    $ cvs diff -r RELEASE_1_0 -r EXPR1
    

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

    $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
    

    Если вы пользуетесь файлами `ChangeLog’, то команда типа нижеуказанной поможет придумать подходящий текст для журнальной записи. Все изменения, которые вы сделали, будут продемонстрированы вам в удобном виде.

    $ cvs diff -u | less
    

    Команда 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’.

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

    Команда export поддерживает стандартные ключи, описанные в See 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: показать состояние файлов и пользователей

    • Краткая сводка: 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 Стандартные ключи командной строки).

    Ключи команды 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 дата, при котором извлекаются самые свежие ревизии, старше чем дата.
    -f file
    Показывать данные для конкретного файла (можно использовать несколько ключей `-f’ на одной командной строке). Это эквивалентно указанию файла в командной строке.
    -n module
    Показывать данные для конкретного модуля (можно использовать несколько ключей `-n’ на одной командной строке).
    -p repository
    Показывать данные, относящиеся к конкретному репозиторию (вы можете задать в командной строке больше одного ключа `-p’.)
    -r rev
    Показывать записи, относящиеся к ревизиям, появившимся после появления ревизии или метки rev. Соответствующие ревизии или метки ищутся в каждом RCS-файле.
    -t tag
    Показывать записи, сделанные с тех пор, как в файле истории появилась запись о метке tag. Это отличается от ключа `-r’ тем, что читается только файл истории, а не RCS-файлы, что гораздо быстрее.
    -u name
    Показывать записи о пользователе name.

    Команда 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 Получение исходного кода).

    Ключи команды 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’.

    Сообщения команды output

    Команда import сообщает вам о своей деятельности, печатая строку на каждый файл, в начале которой находится один символ, сообщающий о статусе файла:

    U file
    Файл уже существует в репозитории и не был локально изменен; будет создана новая ревизия, если нужно.
    N file
    Это новый файл и теперь он добавлен в репозиторий.
    C file
    Файл уже существует в репозитории, но был изменен локально, поэтому вам потребуется объединить изменения.
    I file
    Файл игнорируется (see section Игнорирование файлов с помощью cvsignore).
    L file
    Файл является символической ссылкой; cvs import игнорирует символические ссылки. Периодически предлагается изменить это поведение, но нет четкого соглашения, как именно. (Различные ключ в файле `modules’ могут использоваться для воссоздания символических ссылок при извлечении, обновлении и т. п.; see section Файл `modules’).

    Примеры использования команды import

    См. section Слежение за чужими исходными текстами, а также 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 Стандартные ключи командной строки).

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

    По умолчанию команда log сообщает всю доступную информацию. Ключи предназначены для ограничения выдачи.

    -b
    Печатает информацию о ревизиях на ветке по умолчанию, обычно это самая верхняя ветка на стволе.
    -d dates
    Печатает информацию о ревизиях, помещенных в репозиторий в промежутке времени, заданном списком дат через точку с запятой. Форматы дат те же, что используются вместе с ключом `-D’ (see section Стандартные ключи командной строки). Даты можно комбинировать следующим образом:
    d1<d2
    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’.

    Примеры использования команды log

    Примеры будут с благодарностью приняты.

    Команда 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 смогла найти файлы, находящиеся в других каталогах.

    Ключи команды 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.

    Примеры использования команды rdiff

    Предположим, вы получаете письмо от foo@example.net, который просит вас прислать обновление с версии 1.2 до версии 1.4 компилятора tc. У вас нету под рукой такого обновления, но с помощью CVS вы можете легко сделать так:

    $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
    $$ Mail -s ‘Исправления, которые Вы запрашивали’ foo@example.net
    

    Предположим, что вы сделали версию 1.3 и ветку `R_1_3fix’ для исправлений этой версии. `R_1_3_1’ соответствует версии 1.3.1, которая была сделана некоторое время назад. Теперь вы хотите узнать, что именно было сделано на этой ветке. Можно использовать такую команду:

    $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
    cvs rdiff: Diffing module-name
    File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
    File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
    File bar.h,v changed from revision 1.29.2.1 to 1.2
    

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

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

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

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

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

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

    Команда release поддерживает единственный ключ:

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

    Сообщения команды release

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

    Предупреждение: Все каталоги, которые вы создали, но не добавили в репозиторий с помощью команды add (see section Добавление файлов в каталог), будут бесшумно проигнорированы (и удалены, если был указан флаг `-d’), даже если эти каталоги содержат файлы.

    U file
    P file
    В репозитории существует новая ревизия этого файла, а вы изменили его рабочую копию (`U’ и `P’ означают одно и то же).
    A file
    Файл был добавлен в ваш рабочий каталог, но еще не был помещен в репозиторий. Если вы удаляете вашу копию исходных текстов, то этот файл будет потерян.
    R file
    Файл был удален из вашего рабочего каталога, но еще не был удален из репозитория, потому что вы еще не зафиксировали удаление. See section Команды commit: поместить файлы в репозиторий.
    M file
    Файл изменен в рабочем каталоге. В репозитории также может быть более новая ревизия.
    ? file
    file находится в рабочем каталоге, но не соответствует ни одному файлу в репозитории, и не находится в списке файлов, которые нужно игнорировать (см. описание ключа `-I’ и see section Игнорирование файлов с помощью cvsignore). Если вы удалите рабочий каталог, изменения будут потеряны.

    Примеры использования команды release

    Освободить каталог `tc’ и удалить рабочие копии файлов:

    $ cd ..         # Вам нужно находиться в каталоге, содержащем 
                    # ваш каталог с исходными текстами, перед тем,
                    # как вы выполните команду `cvs release’.
    $ cvs release -d tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc’: y
    $
    

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

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

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

    Ключи команды 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 можно также использовать с такими ключами:

    @std-option-A
    -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 Создание ветвей и слияние.

    Сообщения команды update

    Команды update и checkout информируют о своей деятельности, печатая строчку на каждый обработанный файл. Первый символ означает статус этого файла:

    U file
    Файл был обновлен из репозитория. Обновление производится: для файлов, существующих в репозитории, но не в вашем рабочем каталоге; для файлов, которые вы не изменяли, и для которых в репозитории существует более свежая ревизия.
    P file
    Похоже на `U’, но для этого файла CVS-сервер посылает файл с исправлениями вместо целого файла. Результирующий файл оказывается тем же самым.
    A file
    Файл был добавлен в вашем рабочем каталоге, и будет помещен в репозиторий, когда вы выполните команду commit. Это сообщение – напоминание о том, что файл требуется зафиксировать.
    R file
    Файл был удален из вашей личной копии исходников, и будет удален из репозитория, когда вы выполните команду commit. Это сообщение – напоминание о том, что файл требуется зафиксировать.
    M file
    Файл был изменен в вашем рабочем каталоге. `M’ может означать одно из двух состояний файла, над которым вы работаете: либо этот файл не менялся в репозитории, и поэтому остался неизменным в результате выполнения команды update, либо же файл изменился как в рабочем каталоге, так и в репозитории, но слияние изменений в ваш рабочий файл прошло успешно, без конфликтов. CVS выдает некоторые сообщения, когда сливает изменения, и оставляет резервную копию рабочего файла (как он выглядел перед выполнением update). Точное имя этого файла печатается во время работы update.
    C file
    При попытке объединить изменения из репозитория в вашу рабочую копию файла был обнаружен конфликт. file (ваша рабочая копия) теперь является результатом попытки объединить две ревизии; неизмененная копия файла также находится в рабочем каталоге, с именем `.#file.revision, где revision – это ревизия, на которой был основан измененный вами файл. Разрешение конфликтов описано в section Пример конфликта. (Заметьте, что некоторые системы автоматически удаляют файлы, начинающиеся с `.#’, если к этим файлам не было обращений в течение нескольких дней. Если вы хотите сохранить копию исходного файла, переименуйте его.) Под VMS имя файла начинается с `__’, а не с `.#’.
    ? file
    file находится в вашем рабочем каталоге, но не соответствует ни одному файлу в репозитории, и не находится в списке файлов, которые нужно игнорировать (см. описание ключа `-I’ и see section Игнорирование файлов с помощью cvsignore).


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

  • Comments