Пока вы редактируете исходные файлы в рабочем каталоге, вы всегда можете узнать их статус с помощью `cvs status' и `cvs log'. Как только вы экспортируете файлы из вашей среды разработки, становится гораздо сложнее узнать, какую ревизию эти файлы имеют.
CVS может использовать механизм, известный как
подстановка ключевых слов (или замена ключевых слов),
чтобы помочь в идентификации файлов. Строки вида
$keyword$
и $keyword:...$
в файле
заменяются строками вида $keyword:value$
каждый раз, когда вы получаете новую ревизию файла.
Вот список ключевых слов:
$Author: ott $
$Date: 2000/07/11 03:41:42 $
$Header: /home/linuxcvs/cvsroot/books/GNU/cvs/cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $
$Id: cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $
$Header: /home/linuxcvs/cvsroot/books/GNU/cvs/cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $
, только имя
RCS-файла указано без полного пути.
$Name: $
cvs co
-r first
это ключевое слово заменяется на `Name: first'.
$Locker: $
cvs admin -l
).
$Log: cvs-ru_12.html,v $
Revision 1.1.1.1 2000/07/11 03:41:42 ott
Сделан отдельный каталог для переводов проекта GNU, импортируется
документация по CVS, Automake, gdb, Texinfo.
Сюда же будут перемещены уже имеющиеся переводы.
Будет добавлен перевод руководства по GNU Emacs
-
Журнальное сообщение, которое было введено во время фиксации
изменений, перед которым идет имя RCS-файла, номер ревизии,
имя автора и дата в UTC. Существующие журнальные сообшения
не заменяются. Вместо этого, новое журнальное сообщение
добавляется после
$Log: cvs-ru_12.html,v $
добавляется после Revision 1.1.1.1 2000/07/11 03:41:42 ott
добавляется после Сделан отдельный каталог для переводов проекта GNU, импортируется
добавляется после документация по CVS, Automake, gdb, Texinfo.
добавляется после Сюда же будут перемещены уже имеющиеся переводы.
добавляется после Будет добавлен перевод руководства по GNU Emacs
добавляется после
. Каждая новая
строка содержит в начале ту же самую строку, которая находится
перед ключевым словом $Log: cvs-ru_12.html,v $
перед ключевым словом Revision 1.1.1.1 2000/07/11 03:41:42 ott
перед ключевым словом Сделан отдельный каталог для переводов проекта GNU, импортируется
перед ключевым словом документация по CVS, Automake, gdb, Texinfo.
перед ключевым словом Сюда же будут перемещены уже имеющиеся переводы.
перед ключевым словом Будет добавлен перевод руководства по GNU Emacs
перед ключевым словом
. Например, если в
файле находится
/* Here is what people have been up to:
*
* $Log: cvs-ru_12.html,v $
* Revision 1.1.1.1 2000/07/11 03:41:42 ott
* Сделан отдельный каталог для переводов проекта GNU, импортируется
* документация по CVS, Automake, gdb, Texinfo.
* Сюда же будут перемещены уже имеющиеся переводы.
* Будет добавлен перевод руководства по GNU Emacs
*
* Revision 1.1 1997/01/03 14:23:51 joe
* Add the superfrobnicate option
*
*/
то перед дополнительными строками, которые добавляются при замене
ключевого слова $Log: cvs-ru_12.html,v $
ключевого слова Revision 1.1.1.1 2000/07/11 03:41:42 ott
ключевого слова Сделан отдельный каталог для переводов проекта GNU, импортируется
ключевого слова документация по CVS, Automake, gdb, Texinfo.
ключевого слова Сюда же будут перемещены уже имеющиеся переводы.
ключевого слова Будет добавлен перевод руководства по GNU Emacs
ключевого слова
, будет находиться
` * '. В отличие от предыдущих версий CVS и
RCS, префикс комментария из RCS-файла не
используется. Ключевое слово $Log
полезно при накоплении
полного журнала изменений в исходном файле, но по нескольким
причинам это может привести к определенным проблемам.
See section Проблемы с ключевым словом $Log: cvs-ru_12.html,v $
See section Проблемы с ключевым словом Revision 1.1.1.1 2000/07/11 03:41:42 ott
See section Проблемы с ключевым словом Сделан отдельный каталог для переводов проекта GNU, импортируется
See section Проблемы с ключевым словом документация по CVS, Automake, gdb, Texinfo.
See section Проблемы с ключевым словом Сюда же будут перемещены уже имеющиеся переводы.
See section Проблемы с ключевым словом Будет добавлен перевод руководства по GNU Emacs
See section Проблемы с ключевым словом..
$RCSfile: cvs-ru_12.html,v $
-
Имя RCS-файла без полного пути.
$Revision: 1.1.1.1 $
-
Номер ревизии.
$Source: /home/linuxcvs/cvsroot/books/GNU/cvs/cvs-ru_12.html,v $
-
Полное имя RCS-файла.
$State: Exp $
-
Состояние, присвоенное ревизии. Состояния могут назначаться с
помощью
cvs admin -s
-- см. section Ключи команды admin.
Для того, чтобы поместить в файл ключевое слово, вы просто
пишете в нём, например, $Id: cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $
, а затем фиксируете
файл. CVS автоматически заменит ключевое слово во время
операции фиксирования.
Обычной практикой является помещение строки $
Id$ в
исходные файлы, чтобы они оказались в файлах, созданных из
исходных. Например, если вы управляете исходным кодом
компьютерной программы, вы можете создать переменную, которая
инициализируется этой строкой. Некоторые компиляторы языка C
поддерживают директиву #pragma ident
. Система управления
документами может обеспечивать способ для передачи строки в
сгенерированные файлы.
Команда ident
, являющаяся частью пакета RCS, может
использоваться для извлечения из файла ключевых слов и их
значений. Это полезно для работы с текстовыми файлами, и
особенно полезно для извлечения ключевых слов из двоичных
файлов.
$ ident samp.c
samp.c:
$Id: cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $
$ gcc samp.c
$ ident a.out
a.out:
$Id: cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $
SCCS -- другая популярная система контроля ревизий. В её
состав входит команда what
, очень похожая на ident
и использующаяся в тех же целях. Во многих местах, где не
установлен RCS, стои SCCS. Так как what
ищет
последовательность символов @(#)
, то можно довольно
просто вставлять ключевые слова, которые обнаруживаются обеими
командами. Просто поместите перед ключевым словом RCS
волшебную фразу SCCS, например:
static char *id="@(#) $Id: cvs-ru_12.html,v 1.1.1.1 2000/07/11 03:41:42 ott Exp $";
Подстановка ключевых слов имеет свои недостатки. Иногда бывает нужно, чтобы строка `$'Author$ появилась в файле без того, чтобы CVS интерпретировала её как ключевое слово и заменила на что-нибудь типа `$'Author: ceder $.
К сожалению, нельзя выборочно отключить подстановку ключевых слов. Можно использовать ключ командной строки `-ko' (see section Режимы подстановки), чтобы полностью выключить подстановку.
Во многих случаях вам нужно избежать использования ключевых слов
в исходном тексте, даже несмотря на то, что они появятся в
конечном продукте. Например, исходный текст этого руководства
содержит `$@asis{}Author$' везде, где должна появиться
строка `$'Author$. При использовании nroff
и
troff
можно поместить в ключевое слово нулевой символ
\&
, чтобы добиться подобного эффекта.
Вместе с каждым файлом хранится режим подстановки по умолчанию, и
каждая копия файла в рабочем каталоге также имеет режим
подстановки. Режим по умолчанию задается с помощью ключа
`-k' команд cvs add
и cvs admin
; режим в
рабочем каталоге задается с помощью ключей `-k' и `-A'
команд cvs checkout
и cvs update
. Команда
cvs diff
также имеет ключ `-k'. Некоторые примеры
приведены в section Обработка двоичных файлов.
Доступные режимы таковы:
Revision
получается
$
Revision: 5.7 $.
cvs admin
-l
.
Revision
получается строка
$
Revision$, а не $
Revision: 5.7 $.
Этот ключ полезен для игнорирования изменения, возникших в
результате подстановки ключевых слов, при сравнении разных
ревизий файла.
Revision
генерируется строка $
Revision: 1.1
$ вместо $
Revision: 5.7 $, если она была записана
именно так, когда файл был помещен в репозиторий.
Revision
генерируется строка 5.7
вместо $
Revision: 5.7 $. Это может помочь при
генерации файлов в языках программирования, в которых сложно
отщепить разделители, такие как $
Revision: $, от
конца строки. Однако, дальнейшая подстановка ключевых слов не
может быть осуществлена, когда удалены ключевые слова, поэтому
этот ключ нужно использовать осторожно.
Часто бывает полезно использовать `-kv' совместно с командой
cvs export
-- see section Команда export: экспортировать исходные тексты. Помните только,
что этот ключ некорректно экспортирует двоичные файлы.
Ключевое слово $
Log$ довольно-таки спорно. Пока вы
работаете над проектом, информация легко доступна даже без
использования ключевого слова $
Log$: просто
вызовите cvs log
. Когда вы экспортируете файл, информация
об его истории в любом случае практически бесполезна.
Более серьёзным обстоятельством является то, что CVS не
слишком хорошо справляется с пунктами $
Log$, когда
ветка объединяется с основным стволом. В результате такого
объединения часто возникают конфликты.
Люди часто стараются "исправить" журнальные записи в файле,
исправляя орфографические и даже фактические ошибки. В
результате информация от cvs log
не совпадает с
информацией в файле. Это может быть, а может и не быть проблемой
в реальной жизни.
Звучали рекомендации помещать ключевое слово $
Log$
в конец файла (если вообще использовать это слово). В этом
случае длинный список сообщений об изменениях не будет мешать
чтению исходного файла.
Go to the first, previous, next, last section, table of contents.