В этом приложении описывается общая структура команд CVS, а некоторые команды описываются детально; краткий справочник по командам CVS находится в see section Краткий справочник по командам CVS.
Общий формат всех команд CVS таков:
cvs [ опции_cvs ] команда_cvs [ опции_команды ] [ аргументы_команды ]
cvs
cvs_options
cvs_command
command_options
command_args
К сожалению, есть небольшая путаница между опциями_cvs
и
опциями_команды
. Ключ `-l', когда он используется в
качестве опции CVS, воздействует только на некоторые
команды. Когда этот ключ используется как опция команды, у него
появляется другое значение, и он используется с б'ольшим
количеством команд. Другими словами, не придавайте вышеописанной
категоризации слишком большого значения, а обращайтесь вместо
этого к документации.
CVS может сообщить вызывающей программе, успешно ли завершилась операция или нет, возвращая тот или иной код выхода. Точный способ проверки кода выхода зависит от операционной системы. Например, в скриптах оболочки UNIX переменная `$?' содержит ноль, если последняя команда возвратила код успешного выхода, или же больше нуля, если выполнение программы завершилось с ошибкой.
Если CVS выполняется успешно, то возвращает код успешного
завершения; в случае ошибки программа печатает сообщение об
ошибке и возвращает код неуспешного завершения. Исключением
является команда cvs diff
. Она возвращает код успешного
завершения, если не обнаружила различий, или же код неудачного
завершения, если были обнаружены различия или произошла ошибка.
Так как такое поведение не обеспечивает простого способа
обнаружения ошибок, в будущем, вероятно, команда cvs diff
будет изменена, чтобы вести себя подобно прочим командам
CVS.
Имеются определённые ключи команд 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
-b bindir
-T tempdir
$TMPDIR
и каталог, заданный при
компиляции. Этот параметр должен задавать полный путь.
-d cvs_root_directory
$CVSROOT
. See section Репозиторий.
-e editor
$CVSEDITOR
и $EDITOR
. За дальнейшей информацией обращайтесь к
section Фиксирование изменений.
-f
-H
--help
-l
-n
-Q
-q
-r
$CVSREAD
(see section Все переменные окружения, используемые в CVS). По умолчанию
рабочие файлы создаются доступными для записи, если только не
включено слежение (see section Слежение за чужими исходными текстами).
-s variable=value
-t
-v
--version
-w
$CVSREAD
.
Файлы по умолчанию создаются для чтения и записи, если только не
был установлен $CVSREAD
или же не использовался ключ
`-r'.
-x
./configure --enable-encryption
.
-z gzip-level
В этой главе описываются `ключи_команды', доступные для использования с несколькими командами CVS. Эти ключи всегда задаются справа от имени `команды_CVS'. Не все команды поддерживают эти ключи, но лишь те, для которых ключ имеет смысл. Однако, если команда имеет один из этих ключей, вы можете быть уверены в одинаковом поведении этих ключей с разными командами. (Другие ключи команд, описанные вместе с отдельными командами, могут иметь различное поведение с разными командами CVS).
Предупреждение: команда `history' является исключением, она поддерживает различные ключи, конфликтующие даже со стандартными ключами.
@macro std-option-f
-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
annotate
, checkout
,
export
, rdiff
, rtag
, и update
.
Предупреждение: Команды commit
и remove
также имеют ключ `-f', но он имеет другое поведение.
See section Ключи команды commit, а также section Удаление файлов.
-k 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
,
export
и rtag
.
-P
-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
import
и update
.
rcs
Эта команда -- интерфейс к разнообразным административным возможностям CVS. Некоторые из них имеют сомнительную ценность для CVS и существуют по историческим причинам. Некоторые из таких возможностей, скорее всего, исчезнут когда-либо. Эта команда работает рекурсивно, поэтому нужно соблюдать крайнюю осторожность.
Если на машине под UNIX существует группа cvsadmin
,
то команду cvs admin
могут выполнять только члены этой
группы. Эта группа должна существовать на сервере или на любой
машине, на которой используется не-клиент-серверная версия
CVS. Чтобы запретить всем пользователям выполнение команды
cvs admin
, создайте соответствующую группу и никого в неё
не помещайте.
Под NT группы cvsadmin
не поддерживается, поэтому все
пользователи могут выполнять cvs admin
.
Некоторые ключи имеют сомнительную полезность для CVS, но существуют по историческим причинам. Некоторые даже приводят к невозможности использования CVS, пока вы не отмените их действие!
-Aстарый_файл
-aимена
-b[ревизия]
cvs admin -b
: вернуть обратно версию от
поставщика при использовании веток поставщика (see section Возврат к последней версии от поставщика). Между `-b' и аргументом не должно
быть пробела.
-cстрока
-e[имена]
-I
-i
cvs add
(see section Добавление файлов в каталог).
-ksubst
cvs update
, cvs
export
и cvs checkout
переопределяет этот режим по
умолчанию.
-l[rev]
-L
-mrev:msg
-Nимя[:[rev]]
-nимя[:[rev]]
-oдиапазон
rev1::rev2
::rev
rev::
HEAD
) удаляется.
rev
rev1:rev2
:rev
rev:
cvs tag -d
, затем
выполните cvs admin -o
. Если вы не используете синтаксис
`::', то CVS удалит ревизии, но оставит алфавитные
имена, которые ссылаются на несуществующие ревизии. Такое
поведение оставлено для совместимости с предыдущими версиями
CVS, но так как оно не очень полезно, то в будущем может
измениться, чтобы совпадать со случаем `::'.
Из-за способа, которым CVS обрабатывает ветви, rev
нельзя задавать в виде алфавитного имени, если эта ревизия
находится на ветке. See section Волшебные номера веток, где
объясняется, почему это так.
Убедитесь, что никто не извлёк копию ревизии, которую вы делаете
устаревшей. Могут произойти странные вещи, если кто-то
редактирует эту ревизию и пытается зафиксировать её. Из-за этого
ключ `-o' не следует использовать для отмены ошибочного
фиксирования, вместо этого фиксируйте ещё одну ревизию,
исправляющую ошибочное изменение (see section Слияние изменений между двумя ревизиями).
-q
-sstate[:rev]
dead
для своих внутренних нужд; для
того, чтобы поместить файл в состояние dead
или
восстановить его из этого состояния, используйте команды
cvs remove
и cvs add
, а не cvs admin -s
.
-t[файл]
-t-строка
-U
-u[rev]
-Vn
-xsuffixes
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
поддерживает стандартные ключи, описанные
в (See section Стандартные ключи командной строки.):
-D date
-f
-k kflag
status
. See section Краткий справочник по командам CVS, где
находится дополнительная информация о команде status
.
@std-option-l
-n
-P
-p
-r tag
Вдобавок к этому, можно использовать следующие ключи команды
checkout
:
-c
-d dir
-j tag
-N
-s
Получить копию модуля `tc':
$ cvs checkout tc
Получить копию модуля `tc' в том виде, в котором он находился вчера:
$ cvs checkout -D yesterday tc
commit [-lnRf] [-m 'журнальное_сообщение'
| -F файл] [-r ревизия] [файлы...]
Используйте commit
, если вы хотите поместить в репозиторий
изменения, сделанные в вашей рабочей копии.
Если вы не укажете, какие файлы следует зафиксировать, то команда
проверит все файлы в рабочем каталоге. commit
тщательно
следит за тем, чтобы помещать в репозиторий только те файл,
которые действительно изменились. По умолчанию (или если явно
задать ключ `-R') файлы в подкаталогах также обрабатываются
и фиксируются, если они были изменены; можно использовать ключ
`-l', чтобы ограничить команду commit
только текущим
каталогом.
commit
проверяет, что указанные файлы свежее, чем текущие
ревизии в репозитории; если это не так, то команда выдаст
предупреждение о необходимости выполнить команду update
(see section Команда update: обновить рабочий каталог из репозитория) и завершится, ничего более не делая.
commit
не станет выполнять за вас команду update
,
предоставляя вам сделать это в удобное время.
Если все нормально, будет вызван текстовый редактор, в котором
можно будет ввести журнальное сообщение, которое будет передано
программам журналирования (see section Файл `modules' и see section Файл loginfo), а также помещено в RCS-файл в репозитории. Это
журнальное сообщение можно извлечь с помощью команды log
,
см. section Команда log: напечатать информацию о файлах. Можно задать журнальное сообщение в
командной строке с помощью ключа `-m
журнальное_сообщение', при этом редактор не будет вызван,
или использовать ключ `-F файл', чтобы задать файл,
содержащий журнальное сообщение.
Следующие стандартные ключи (see section Стандартные ключи командной строки, где можно
найти их полное описание) поддерживаются командой commit
:
-l
-n
-r рев
Команда commit
также поддерживает следующие ключи:
-F file
-f
$ cvs commit -f file $ cvs commit -r 1.8 fileКлюч `-f' запрещает рекурсию (то есть подразумевает использование `-l'). Для того, чтобы заставить CVS зафиксировать новую ревизию для всех файлов во всех подкаталогах, используйте `-f -R'.
-m сообщение
Вы можете зафиксировать изменения в ревизию, находящуюся на ветке
(в её номере четное количество точек) с помощью ключа
`-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 [-lR] [format_options]
[[-r rev1 | -D date1] [-r rev2 | -D date2]] [files...]
Команда diff
используется для сравнения различных ревизий
файлов. Действие по умолчанию -- сравнить ваши рабочие копии
файлов с ревизиями, на которых эти файлы основаны, и сообщить о
всех обнаруженных различиях.
Если заданы какие-либо файлы, то сравниваются только они. Если заданы имена каталогов, то сравниваются файлы в этих каталогах.
Смысл кода завершения для команды diff
отличается от всех
прочих команд; детали описаны в section Код выхода CVS.
Команда checkout
поддерживает стандартные ключи, описанные
в See section Стандартные ключи командной строки.
-D дата
-k kflag
-r tag
Нижеследующие ключи задают формат выдачи. Они имеют то же значение, что и в программе 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
Нижеследующая строка выдает унифицированную (с ключом `-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
Эта команда похожа на команду checkout
; её нужно
использовать, если вы хотите получить копию исходных текстов
модуля без служебных каталогов CVS. Например, команду
export
можно использовать, чтобы подготовить исходные
тексты для передачи вовне. Эта команда требует указания даты или
метки (с помощью ключей `-D' или `-r'), чтобы вы могли
воспроизвести те же самые файлы, которые вы отдаете.
Часто при использовании cvs export
приходится указывать
флаг `-kv'. При этом ключевые слова будут развернуты так,
чтобы при импорте в другом месте не потерялась информация о
ревизиях. Помните, что в этом случае бинарные файлы не будут
корректно обрабатываться. Также помните, что после использования
флага `-kv' больше нельзя будет использовать команду
ident
(являющуюся частью пакета RCS), которая ищет
строки с ключевыми словами (см. ident(1)
). Если вы хотите
использовать ident
, то не используйте `-kv'.
Команда export
поддерживает стандартные ключи, описанные в
See section Стандартные ключи командной строки.
-D date
-n
-r метка
Вдобавок поддерживаются следующие ключи (общие для
checkout
и export
):
-d dir
-k subst
-N
CVS может вести файл истории, отслеживающий каждое
использование команд checkout
, commit
, rtag
,
update
и release
. Для того, чтобы отображать эту
информацию в разных форматах, используется команда
history
.
Журналирование должно быть включено путем создания файла `$CVSROOT/CVSROOT/history'.
Предупреждение: history
использует ключи
`-f', `-l', `-n' и `-p' не так, как они
обычно используются с командами CVS (see section Стандартные ключи командной строки).
Несколько флагов, показанных выше в качестве параметра `-report', задают вид генерируемого отчета:
-c
commit
(то есть о каждом
изменении репозитория).
-e
-m module
-o
-T
-x type
F
O
E
T
update
могут появиться одна из
четырех типов записей:
C
G
U
W
commit
могут возникнуть одна из
трех типов записей:
A
M
R
Ключи, показанные в виде параметра `-flags', задают дополнительные ограничения или, наоборот, добавляют дополнительную информацию к отчету, не требуя дополнительных параметров:
-a
history
).
-l
-w
history
.
Ключи, показанные в виде параметра `-options args', задают дополнительные ограничения, используя аргументы:
-b str
-D дата
-f file
-n module
-p repository
-r rev
-t tag
-u name
Используйте 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
поддерживает стандартный ключ, описанный в
see section Стандартные ключи командной строки:
-m сообщение
Есть также нижеследующие специальные ключи:
-b branch
-k subst
-I name
-W spec
Команда import
сообщает вам о своей деятельности, печатая
строку на каждый файл, в начале которой находится один символ,
сообщающий о статусе файла:
U file
N file
C file
I file
L file
cvs import
игнорирует
символические ссылки. Периодически предлагается изменить это
поведение, но нет четкого соглашения, как именно. (Различные
ключ в файле `modules' могут использоваться для воссоздания
символических ссылок при извлечении, обновлении и т. п.;
see section Файл `modules').
См. section Слежение за чужими исходными текстами, а также section Создание дерева каталогов из нескольких файлов.
Отображает журнальную информацию о файлах. 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
сообщает всю доступную
информацию. Ключи предназначены для ограничения выдачи.
-b
-d dates
d1<d2
d2>d1
<d
d>
d<
>d
d
-h
-N
-R
-rrevisions
rev1:rev2
:rev
rev:
branch
branch1:branch2
branch.
-s states
-t
-wlogins
log
печатает информацию о ревизиях удовлетворяющих ключам
`-d', `-s', `-w' и совокупности ключей `-b' и
`-r'.
Примеры будут с благодарностью приняты.
patch
.
Создает файл изменений между двумя версиями продукта в формате
программы patch(1)
, написанной Ларри Воллом. Этот файл
можно скормить программе patch
, чтобы обновить старую
версию до новой. (Это одна из немногих команд CVS, которые
работают напрямую с репозиторием и не требуют предварительного
извлечения исходных текстов.) Результат выдается на стандартный
вывод.
Вы можете задать (используя стандартные ключи `-r' и `-D') любую комбинацию двух ревизий или дат. Если указана только одна ревизия или дата, то результат содержит изменения в промежутке между этой ревизией или датой и текущей головной ревизией в RCS-файле.
Заметьте, что если соответствующая версия продукта находится в
нескольких каталогах, то может потребоваться указать команде
patch
при обновлении старых исходников ключ `-p',
чтобы patch
смогла найти файлы, находящиеся в других
каталогах.
Команда rdiff
поддерживает стандартные ключи, описанные в
see section Стандартные ключи командной строки:
-D date
-r tag
Вдобавок доступны следующие ключи:
-c
-s
-t
-u
patch
не могли обрабатывать этот
формат, поэтому если вы планируете опубликовать изменения в сети,
то вам, скорее всего, не следует использовать ключ `-u'.
-V vn
Предположим, вы получаете письмо от 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
Эту команду можно использовать, чтобы безопасным образом отменить `cvs checkout'. Так как CVS не блокирует файлы, то использовать эту команду необязательно. Вы всегда можете просто удалить рабочий каталог, если желаете; правда, в этом случае вы рискуете потерять изменения, о которых забыли, а в файле истории (see section Файл history) не остается никаких следов того, что вы отбросили извлеченные исходники.
Команда `cvs release' позволяет избежать этой проблемы. Она проверяет, что в рабочем каталоге нет незафиксированных изменений; что вы выполняете эту команду из каталога, в котором находится рабочий каталог; что репозиторий, из которого был извлечен рабочий каталог, совпадает с репозиторием, описанным в базе данных модулей.
Если все эти условия выполняются, `cvs release' оставляет запись о своем выполнении в журнал истории (удостоверяя, что вы сознательно отложили извлеченные тексты).
Команда release
поддерживает единственный ключ:
-d
release
рекурсивно
удаляет все каталоги и файлы. Это имеет очень важный побочный
эффект: все каталоги, которые вы создали в извлеченном дереве
исходников, но не добавили в репозиторий (используя команду
add
; see section Добавление файлов в каталог) будут бесшумно удалены ---
даже если эти каталоги непусты!
Перед тем, как release
освободит ваши исходные тексты,
эта команда печатает однострочное сообщение для каждого файла,
который не соответствует содержимому репозитория.
Предупреждение: Все каталоги, которые вы создали, но не
добавили в репозиторий с помощью команды add
(see section Добавление файлов в каталог), будут бесшумно проигнорированы (и
удалены, если был указан флаг `-d'), даже если эти каталоги
содержат файлы.
U file
P file
A file
R file
M file
? file
Освободить каталог `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
поддерживает стандартные ключи, которые
полностью описаны в see section Стандартные ключи командной строки:
-D date
-f
-k kflag
status
можно использовать для просмотра липких ключей. См. section Краткий справочник по командам CVS, где описана команда status
.
@std-option-l
-P
-p
-r rev
Команду update
можно также использовать с такими ключами:
-d
update
работает
только с файлами и каталогами, которые уже были созданы в рабочем
каталоге.
Этот ключ полезен при обновлении каталогов, которые были созданы
в репозитории уже после извлечения вашей рабочей копии, но у него
есть неприятный побочный эффект: если вы специально избегали
определенных каталогов в репозитории, когда создавали рабочий
каталог (используя имена модулей или явно перечисляя в командной
строке требуемые файлы и каталоги), то обновление с ключом
`-d' создаст эти нежелаемые каталоги.
-I name
-Wspec
-jrevision
Команды update
и checkout
информируют о своей
деятельности, печатая строчку на каждый обработанный файл.
Первый символ означает статус этого файла:
U file
P file
A file
commit
. Это
сообщение -- напоминание о том, что файл требуется
зафиксировать.
R file
commit
. Это
сообщение -- напоминание о том, что файл требуется
зафиксировать.
M file
update
,
либо же файл изменился как в рабочем каталоге, так и в
репозитории, но слияние изменений в ваш рабочий файл прошло
успешно, без конфликтов.
CVS выдает некоторые сообщения, когда сливает изменения, и
оставляет резервную копию рабочего файла (как он выглядел перед
выполнением update
). Точное имя этого файла печатается
во время работы update
.
C file
? file
Go to the first, previous, next, last section, table of contents.