CVS -- Система Управления Параллельными Версиями - Руководство по командам 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
- В CVS 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
-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', но он имеет другое поведение. Смотри 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 запоминает метку и продолжает использовать её при дальнейших командах обновления, пока вы не укажете обратного (дальнейшая информация о липких метках/датах находится в 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 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 [ключи] модули...'
- Требует: репозиторий
- Изменяет: рабочий каталог
-
Синонимы:
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
поддерживает стандартные ключи, описанные
в 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' статуса модуля.
Пример использования команды `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
Следующие стандартные ключи (их полное описание можно найти в
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
поддерживает стандартные ключи, описанные
в 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
поддерживает стандартные ключи, описанные в
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 дата', при котором извлекаются самые свежие ревизии, старше чем дата.
-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 или раньше.
-h
- Печатает только имя RCS-файла, имя файла в рабочем каталоге, головную ревизию, ревизию по умолчанию, список прав доступа, блокировки, алфавитные имена и суффикс. @std-option-l
-N
- Не выдает список меток для этого файла. Этот ключ полезен, если вы используете много меток, чтобы избежать просматривания трех экранов информации о метках.
-R
- Печатает только имя RCS-файла.
-rrevisions
-
Печатает информацию о ревизиях, перечисленных в списке ревизий и
их диапазонов, разделенных запятыми. В этой таблице приведены
все доступные форматы диапазонов:
rev1:rev2
- Ревизии от rev1 до rev2 (должны находиться на одной ветке).
:rev
- Ревизии с начала ветки вплоть до rev включительно.
rev:
- Ревизии, начиная с rev до конца ветки, содержащей rev.
branch
- Аргумент, являющийся веткой означает все ревизии на этой ветке.
branch1:branch2
- Диапазон ветвей означает все ревизии на ветках в этом диапазоне.
branch.
- Последнюю ревизию на ветке branch.
-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
можно также использовать с такими ключами:
-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 Создание ветвей и слияние.
Сообщения команды 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.