НАЗВАНИЕ
co - востребование из RCS архива определенной версии файла
СИНТАКСИС
co [флаги] имя-файла ...
ОПИСАНИЕ
Команда co получает из архивного файла копию некоторой
версии файла и помещает ее в рабочий файл.
Полное имя файла, содержащее архивный суффикс, соответствует архивному файлу, все прочие считаются рабочими файлами. О соответствии имен файлов, см. ci(1) .
Версии рабочего файла могут быть востребованы из архива с бронированием или без него. Бронирование предотвращает взаимные накладки при внесении изменений. Востребование файла для чтения или не изменяющей его обработки, не требует бронирования. Версия востребованная для внесения изменений и последующей регистрации, должна быть забронирована некоторым пользователем, чтобы предотвратить изменение файла другими во время его работы. Попытка бронирования завершается ошибкой программы, если данную версию уже забронировал другой пользователь. (Бронирование может быть отменено командой rcs(1) ). Для бронирования необходимо также, чтобы пользователь был внесен в список лиц имеющих доступ к изменению файла, за исключением трех случаев: этот список пуст либо пользователь является владельцем файла или системным администратором. Востребование без бронирования может быть осуществлено любым пользователем, имеющим право чтения архивного файла и не зависит от наличия бронирования.
Востребуемая версия может быть задана с помощью флагов по номеру и ветви, времени регистрации, автору и статусу. Если (не)примененные флаги определяют несколько версий, то извлекается последняя версия главной ветви (или ветви, используемой по умолчанию, см. флаг -b команды rcs(1) ). Номер версии и/или ветви может бать использован с любым из флагов -f, -I, -l, -M, -p, -q, -r или -u.
Флаги -d (дата), -s (статус), и -w (автор) выберут версию из ветви, заданной версиями -f, ..., -u; а если они не заданы, то из ветви, используемой по умолчанию.
Если команду co применить к архивному файлу, не содержащему зарегистрированных версий, то создастся рабочий файл нулевой длины. Подстановка значений ключевых символов в идентификационные маркеры осуществляется всегда. (см. ниже).
ФЛАГИ
Используется чтобы подавить сообщения о различающихся строках, вызванные подстановкой ключевых символов, если нужно сравнить две версии. Регистрационные же записи после ключевого слова $Log$ подставляются, даже если задан флаг -kk, поскольку их использование осмыслено даже в такой ситуации, а тем более, при объединении изменений, внесенных в две ветви.
Используется чтобы убрать из файла ключевые слова типа $Revision: $ для языков, где это невозможно сделать средствами самого языка, например, включив его в комментарий. Однако, удаленные ключевые слова, не могут быть восстановлены автоматически. Опасность потери ключевых слов не позволяет использовать флаг -kv вместе с флагом -l, и потому атрибут права владельца на изменение рабочего файла отменяется. Для редактирования, востребуйте файл повторно без -kv.
8:00 pm lt по умолчанию -- сегодня 4:00 AM, Jan. 12, 1990 1990-01-12 04:00:00+00 стандарт ISO 8601 (UTC) 1990-01-11 20:00:00-08 ISO 8601 (местное) 1990/01/12 04:00:00 стандартный формат RCS Thu Jan 11 20:00:00 1990 LT выдача ctime(3) + LT Thu Jan 11 20:00:00 PST 1990 выдача date(1) Fri Jan 12 04:00:00 GMT 1990 Thu, 11 Jan 1990 20:00:00 -0800 Internet RFC 822 12-January-1990, 04:00 WETДля большинства полей существуют значения, используемые по умолчанию. Часовой пояс -- UTC, но флаг -z может это изменить. Порядок в значениях по умолчанию: год, месяц, день, час, секунда (начиная с более крупных единиц -"big endian" формат). Если со флагом не заданы какие-то единицы, то они, начиная с самых крупных до первого заданного поля, полагаются равными их значению в текущем времени в заданном часовом поясе; остальные полагаются равными их минимальному значению. Например, если не задана флаг -z, то в примере выше, флаг -d20,10:30 равносилен -d"1990/01/20 10:30:00". Обратите внимание на использование кавычек или обратной косой черты, если строка с датой содержит пробел.
Список joinlist составлен из пар вида rev2:rev3, разделенных запятыми, где rev2 и rev3 это номера (числовые или символические) версий. Первой в этом списке задается версия rev1 которая определяет версию к которой будут применяться остальные флаги (-f, ..., -w). Если пар более одной, то для каждой последующей пары, роль rev1 будет исполнять результат применения команды к предыдущей паре.
То что к первой версии применяются лишь изменения, ведущие от второй версии к третьей, имеет несколько следствий. Во-первых, изменения, ведущие от rev1 к rev2 игнорируются. Во-вторых, эта операция перестановочна по отношению к версиям rev1 и rev3 . В-третьих, эта операция объединяет изменения ведущие от rev2 к rev1 с изменениями ведущие от rev2 к rev3. Используется в двух случаях.
Пусть rev1 и rev3 конечные версии двух ветвей с общим предком rev2. Тогда этот флаг объединит изменения сделанные в файле в рамках двух независимых проектов, соответствующих двум ветвям. Это позволяет нескольким людям одновременно работать над одним файлом.
Пусть номера версий на одной ветви удовлетворяют условию rev1 < rev2 < rev3 . Тогда этот флаг отменит изменения сделанные в файле в период работы над rev2 . Это позволяет исключить ошибки, внесенные на ранних стадиях проекта, не переделывая заново работы, сделанной на более поздних стадиях.
Если изменения ведущие от rev2 к rev1 и изменения ведущие от rev2 к rev3 были применены к одной и той же части файла, программа выдаст сообщение так, как описано в merge(1).
Для первой пары можно опустить rev2 , и тогда будет использован общий предок. Если какой-либо из аргументов представляет собой ветвь, используется последняя версия этой ветви. Поскольку флаг -l бронирует rev1 , что подразумевает запись результата в соответствующую ей ветвь, операция не полностью симметрична относительно первой и третьей версий.
флаг формат времени -z 1990/01/12 04:00:00 (по умолчанию) -zLT 1990-01-11 20:00:00-08 -z+05:30 1990-01-12 09:30:00+05:30Флаг -z влияет только на маркеры, и не меняет формата даты и времени в архивном файле, которые всегда задается во Всемирном Времени.
АВТОМАТИЧЕСКАЯ ИДЕНТИФИКАЦИЯ
Если в тексте файла встречаются выражения вида $keyword$ или
$keyword:...$ , где keyword одно из описанных ниже ключевых
слов, то они заменяются идентификационными маркерами -строками вида $keyword:значение$ . Обычно их вставляют в
комментарии или строковые переменные программ -- для
распознавания версий.
Как правило, начальная версия содержит идентификационные маркеры в виде $keyword$. Подстановка значения происходит при востребовании: команда co заменит такой маркер маркером вида $keyword:значение$ . В случае, если регистрируемый рабочий файл уже содержит значения ключевых слов, то старые значения хранятся в архиве и будут изменены только при востребовании. (Новые значения тоже хранятся, но в другом виде.) Таким образом, обновление идентификационных маркеров совершается командой co автоматически, но флаг -k может изменить такое поведение.
КЛЮЧЕВЫЕ СЛОВА И ИХ ЗНАЧЕНИЯ:
Подстрока, стоящая перед символом $Log$ , добавляется перед каждой строкой регистрационных записей. Например, если эта строка выглядит как " // $Log: tan.cc $" , то перед каждой строкой регистрационных записей будет добавлено " // " , что удобно для языков программирования, где комментарии продолжаются до конца строки. Для других языков регистрационные записи помещают внутрь многострочного комментария. Так, для языка C , регистрационные записи превратятся в канонический комментарий, отмеченый звездочками, если при инициализации архива оформить его в виде
/* * $Log$ */Для совместимости с прежними версиями, для префиксов вида /* или (* , возможно, с дополнительными пробелами, внутренние строки содержат пробел вместо / или (; однако, в дальнейших версиях, это свойство не будет сохранено.
Если для придания идентификационным маркерам красивого вида потребуются нижеследующие символы, то они могут быть заданы с помощью обратной косой черты.
символ представление tab \t newline \n space \040 $ \044 \ \\
АТРИБУТЫ ФАЙЛОВ
Рабочий файл наследует все разрешения на чтение и выполнение
от архивного файла. Разрешение на изменение файла владельцу
дается всегда, кроме двух случаев: либо был использован флаг
-kv либо файл не забронирован никем для внесения изменений
при строгой проверке бронирования (см. rcs(1)).
Если рабочий файл уже существует, и пользователь имеет право его изменять, то команда co запросит разрешение на затирание старого рабочего файла и аварийно прервет работу, если не получит разрешения или такой запрос невозможен. Если же файл закрыт для изменений или задан флаг -f , то старый рабочий файл затирается без предупреждения.
ИМЕНА ФАЙЛОВ
Команда co ищет файлы так же, как и команда ci(1) , за
исключением того, что ей не нужно читать рабочий файл, если
номер версии не задан символом $ .
ПЕРЕМЕННЫЕ СРЕДЫ
set LOGNAME=имя-пользователя
СООБЩЕНИЯ
Для каждой востребуемой версии каждого файла команда co
печатает имя архивного файла, имя рабочего файла и номер
извлекаемой версии. Возвращает операционной системе 0 тогда
и только тогда, когда все операции завершились успешно.
СМ. ТАКЖЕ
rcsintro(1), ci(1), ctime(3), date(1), ident(1), make(1),
rcs(1), rcsclean(1), rcsdiff(1), rcsmerge(1), rlog(1),
rcsfile(5)
Walter F. Tichy, RCS--A System for Version Control,
Software--Practice & Experience 15, 7 (July 1985), 637-654.
Copyright (C) Walter F. Tichy, Paul Eggert.
ОГРАНИЧЕНИЯ
Системные (жесткие) линки к рабочим и архивным файлам не
сохраняются. См. ci(1) ВРЕМЕННЫЕ ФАЙЛЫ И ЛИНКИ.
Не существует средства подавить подстановку значений в ключевые слова средствами RCS кроме иного их написания. Для текстов, используемых командами nroff и troff, например, это достигается помещением в ключевое слово нулевого символа \&.