- •Часть I. Подготовка к работе
- •Глава 1. Использование клавиатуры 11
- •Глава 2. Основные команды языка 19
- •Глава 3. Работа с файловой системой qnx 29
- •Часть II. Управление системой 34
- •Глава 4. Основная установка 34
- •Глава 5. Установка сети 48
- •Глава 6. Ввод учитываемых пользователей 58
- •Глава 7. Подключение терминалов, принтеров и модемов 71
- •Глава 8. Установка второй файловой системы 88
- •Глава 9. Развитие конфигурации сети 99
- •Глава 10. Буферизация печати 112
- •Глава 11. Построение заданного образа операционной системы 134
- •Глава 12. Использование системы управления версиями 140
- •Глава 13. Изготовление копий 149
- •Глава 14. Восстановление дисков и файлов 156
- •Глава 15. Система обновления версий Quantum 176
- •Часть I. Подготовка к работе
- •Глава 1. Использование клавиатуры
- •Глава 2. Основные команды языка
- •Глава 3. Работа с файловой системой qnx
- •Часть II. Управление системой
- •Глава 4. Основная установка
- •Глава 5. Установка сети
- •Глава 6. Ввод учитываемых пользователей
- •Глава 7. Подключение терминалов, принтеров и модемов
- •Глава 8. Установка второй файловой системы
- •Глава 9. Развитие конфигурации сети
- •Глава 10. Буферизация печати
- •Глава 11. Построение заданного образа операционной системы
- •Глава 12. Использование системы управления версиями
- •Глава 13 изготовление копий
- •Глава 14. Восстановление дисков и файлов
- •Глава 15. Система обновления версий quantum
Глава 12. Использование системы управления версиями
В этой главе...
Что такое система управления версиями - RCS (Revision Control
System)?
Подготовка к работе
Автоматическая идентификация
Фор-мат RCS-файлов
Команды RCS
12.1. Что такое RCS?
RCS помогает Вам управлять множеством версий текстовых файлов.
RCS автоматизирует хранение, поиск, регистрацию, определение и объ-
единение версий. RCS полезна для любого текста, который часто меня-
ется, включая программы, документацию, графику, статьи и форматы
писем.
Точнее говоря, RCS позволяет Вам делать следующее:
- Хранить и отыскивать множество версий текста - В RCS измене-
ния не уничтожают подлинник; предшествующие версии остаются доступ-
ными. Вы можете отыскать версии в диапазоне по числу исправлений,
символическим именам, дате, авторам и состоянию.
- Поддерживать полную историю изменений - RCS регистрирует все
изменения автоматически. Кроме того, в тексте каждой версии RCS
хранит имя автора, дату, время регистрации и регистрационное сооб-
щение, суммирующее изменения. Регистрация облегчает выяснение, что
случилось с модулем, не делая сравнения исходных распечаток и не
беспокоя расспросами коллег.
- Решать конфликты доступа - Когда два или более программиста
пытаются изменить одну и ту же версию, RCS предупреждает програм-
мистов и предохраняет одну модификацию от искажения другой.
- Поддерживать дерево версий - RCS может поддерживать отдель-
ные строки разработки для каждого модуля. Система загружает древо-
видную структуру, которая представляет собой предшествующие связи
между версиями.
- Объединение версий и разрешение конфликтов - Вы можете объ-
единить две отдельные строки разработки для модуля. Если версии,
которые нужно объединить, относятся к одному и тому же коду, RCS
предупреждает Вас о перекрытии версий.
- Управление версиями и конфигурациями - Вы можете присвоить
символические имена версиям и отметить версии, как выходные, ста-
бильные, экспериментальные и т.п. Таким способом конфигурация моду-
лей может быть описана просто и непосредственно.
- 141 -
- Автоматически опознавать каждую версию - RCS позволяет Вам
присвоить каждой версии имя, номер версии, время создания, автора и
т.п. Идентификация - подобно метке, которую Вы можете вставить в
соответствующее место текста версии. Идентификация упрощает опреде-
ление того, какие версии каких модулей создают данную конфигурацию.
- Минимизировать вторичную память - RCS необходим небольшой
дополнительный объем памяти для версий, т.к. хранятся только разли-
чия. Если промежуточные версии удаляются, то соответствующие данные
сжимаются.
12.2. Подготовка к работе
Базовый интерфейс с пользователем для RCS прост для изучения.
Вы можете выполнить большинство основных функций с помощью только
двух команд:
- команда ci - "check-in". Эта команда размещает содержимое
файла в архивном файле, названном RCS-файлом. RCS-файл содержит все
версии конкретного файла;
- команда co - "check-out". Эта команда отыскивает исправления
в RCS-файле, создавая рабочий файл.
12.2.1. Сохранение
Теперь допустим, у Вас есть файл f.c, который Вы хотите уста-
новить под управлением RCS. Вызовите команду сохранения ci:
ci f.c
Эта команда:
1) создает RCS-файл f.c,v;
2) загружает f.c в f.c,v, как исправление 1.1;
3) удаляет f.c;
4) запрашивает у Вас описание.
Описание, которое Вы вводите, должно быть кратким обзором со-
держимого файла. Все последующие команды сохранений запросят у Вас
логический вход, под которым будут суммироваться изменения, которые
Вы сделали. Файлы, заканчивающиеся ",v", называются RCS-файлами
(v стоит для "версий"); все другие файлы называются рабочими файла-
ми.
12.2.2. Извлечение
Для того, чтобы получить рабочий файл f.c в вышеуказанном при-
мере, используйте команду извлечения co:
- 142 -
со f.c
Эта команда извлекает самую последнюю версию из f.c,v и запи-
сывает его в f.c. Если Вы хотите отредактировать f.c, Вы должны
заблокировать доступ к нему, когда Вы извлекаете его по команде со:
со -l f.c
Теперь Вы можете редактировать f.c.
Скажем, Вы провели редактирование и хотите увидеть, какие из-
менения Вы сделали. Команда:
rcsdiff f.c
сообщит Вам различие между самой последней сохраненной версией и ра-
бочим файлом. Вы можете затем опять сохранить файл, вызывая:
ci f.c
При этом номер версии соответственно увеличивается.
12.2.3. Блокирование файлов
Если ci выдает сообщение:
ci error: no lock set by your name
Это значит, что Вы пытались выполнить сохранение (ci) файла,
не блокируя его при выполнении извлечения (co). Конечно, теперь уже
поздно выполнять команду co с блокировкой, т.к. другая команда co
перезапишет Ваши модификации. Вместо этого, Вам следует вызвать:
rcs -l f.c
Эта команда заблокирует для Вас самую последнюю версию, если
кто-нибудь другой уже не опередил Вас. В этом случае Вы должны до-
говориться с этим человеком.
Блокировка гарантирует, что Вы и только Вы можете сохранить
следующую коррекцию, и избавляет от проблем, если несколько человек
работают с одним и тем же файлом. Даже если версия блокирована, то
файл может быть доступен для чтения, компиляции и т.п.
Единственное, что обеспечивает блокировка, это предотвращение
выполнения команды ci кем-нибудь другим, кто не выполнил блокирова-
ние. Если Ваш RCS-файл - личный (то есть Вы - единственный человек,
- 143 -
который собирается делать в нем исправления), строгая блокировка не
нужна и Вы можете ее отключить.
Если строгая блокировка выключена, владелец RCS-файла не нуж-
дается в блокировании для команды ci, но все другие пользователи
должны ее делать.
Включить и выключить строгую блокировку Вы можете следующими
командами:
rcs -L f.c установить строгую блокировку
rcs -u f.c установить нестрогую блокировку
12.2.4. Создание RCS-каталога
Если Вы не хотите привести в беспорядок Ваш текущий каталог с
RCS-файлами, создайте подкаталог, названный RCS, в Вашем текущем
каталоге и переместите туда все Ваши RCS-файлы. RCS-команды прос-
мотрят сначала этот каталог, чтобы найти необходимые файлы. Все ко-
манды, рассмотренные выше, будут работать без какой-либо модифика-
ции.
Вы можете определить пары RCS- и рабочих файлов тремя путями:
- задать оба файла;
- задать только рабочий файл;
- задать только RCS-файл.
Как RCS, так и рабочие файлы могут иметь произвольные префиксы
маршрута; команды RCS сопоставят их автоматически.
12.2.5. Защита Вашего рабочего файла
Для того, чтобы избежать удаления рабочего файла во время вы-
полнения check-in в случае, если Вы хотите продолжить редактирова-
ние или компиляцию, введите одну из этих команд:
ci -l f.c
ci -u f.c
Эти команды сохраняют f.c, как обычно, но выполняют неявное
извлечение. Таким образом, они сохраняют Вам одну операцию
check-out. Команда ci -l также блокирует сохранение версии - это
полезно, если Вы хотите продолжить редактировать. Команда ci -u не
блокирует сохранение версии - это полезно, если Вы просто хотите
прочитать файл. Обе команды корректируют маркеры идентификации в
Вашем рабочем файле (смотрите "Автоматическую идентификацию").
12.2.6. Присваивание номеров исправлений
- 144 -
В команде ci Вы можете задать номер, который Вы хотите присво-
ить сохраняемым версиям. Скажем, все Ваши версии были пронумерованы
1.1, 1.2, 1.3 и т.п., и Вы хотите начать версию 2. Одна из этих ко-
манд:
ci -r2 f.c
ci -r2.1 f.c
присвоит номер 2.1 новому исправлению. Затем команда ci будет нуме-
ровать последующие исправления: 2.2, 2.3 и т.п. Соответствующие ко-
манды со:
со -r2 f.c
со -r2.1 f.c
найдут самое последнее исправление с номером 2.x и исправление 2.1,
соответственно. Если Вы вызываете команду со без номера версии, она
выбирает самую последнюю версию (то есть самую последнюю версию с
номером, состоящим из двух частей). Номера более чем с двумя частя-
ми необходимы для ветвей. Например, для того, чтобы начать ветвь в
версии 1.3, вызовите:
ci -r1.3.1 f.c
Эта команда начинает ветвь номер в версии 1.3 и присваивает
номер 1.3.1.1 новой версии. Для получения дополнительной информации
о ветвях смотрите раздел "Формат RCS-файлов".
12.3. Автоматическая идентификация
RCS позволяет Вам размещать специальные строки идентификации в
Ваши исходный и объектный коды. Вы просто устанавливаете маркер:
$Id$
в Ваш текст, например, в комментарии. RCS заменит этот маркер строкой
следующего вида:
$Id: filename revision date time author state $
С таким маркером на первой странице каждого модуля Вы можете
всегда увидеть, с какой версией Вы работаете. RCS сохраняет маркеры
последней версии автоматически. Для того, чтобы перенести маркеры в
Ваш объектный код, просто поместите их в литерные символьные стро-
- 145 -
ки. В языке Cи Вы делаете это следующим образом:
static char rcsid[] = "$Id$";
Команда ident извлекает такие маркеры из любого файла, даже
объектного кода и дампов. Таким образом, команда ident позволяет
Вам выяснять, какие исправления каких модулей использовались в дан-
ной программе. Полезно устанавливать маркер $Log$ в Ваш текст в
комментарии. Этот маркер накапливает регистрационные сообщения, ко-
торые запрашиваются во время регистрации. Таким образом, Вы можете
хранить полную историю Вашего файла непосредственно в файле. Есть
различные дополнительные маркеры идентификации; описание команды со
дано в "Utilities Reference".
12.3.1. Дополнительная информация
Если Вы хотите получить дополнительную информацию о RCS, мы
рекомендуем: Walter F. Tichy, "RCS - система для управления версия-
ми," Software - Practice & Experience 15, 7, July 1985.
12.4. Формат RCS-файлов
Содержание RCS-файлов описано нижеуказанной грамматикой. Текст
- в свободном формате, следующие символы, которые формируют пробел,
не имеют никакого значения и исключаются в строках:
<space>
<backspace>
<tab>
<newline>
<vertical tab>
<form feed>
<carrige return>
Строки заканчиваются одним знаком @ в конце каждой строки. Ес-
ли строка должна содержать эти знаки, знак @ должен быть удвоен. В
противном случае, строки могут содержать произвольные двоичные дан-
ные. Метасинтаксис использует следующие соглашения:
.
- 146 -
-------------------------------------------------------------------
Соглашение: Назначение:
-------------------------------------------------------------------
| разделяет альтернативы
{ и } включает необязательные фразы
{ и }* включает фразы, которые могут быть повторены нуль
или более раз
{ и }+ включает фразы, которые должны появиться, по крайней
мере, один раз и могут быть повторены
-------------------------------------------------------------------
Имейте в виду также, что эти терминальные символы выделены
двойной толщиной; нетерминальные символы - курсивом.
rcstext ::= admin {delta}* desc {deltatext}*
admin ::= head {num};
{ branch {num}; }
access {id}*;
symbols {id:num}*;
locks {id:num}*; {strict;}
{ comment {string}; }
{ expend {string}; }
{ newphrase }*
delta ::= num
date num;
author id;
state {id};
branches {num}*;
next {num};
{ newphrase }
desc ::= desc string
deltatext ::= num
log string
{ newphrase }*
text string
num ::= {digit{.}}+
digit ::= 0|1|..|9
id ::= letter{idchar}*
- 147 -
letter ::= любая буква
idchar ::= любой видимый графический символ кроме специального
special ::= $|,|.|:|;|@
string ::= @{любой символ с удвоенным @}*@
newphrase ::= id word*;
word ::= id|num|string|:
Идентификаторы зависят от регистра. Ключевые слова - только на
нижнем регистре. Множества ключевых слов и идентификаторов могут
перекрываться.
В большинстве сред RCS использует кодирование по ISO_8859/1:
буквы - восьмиричные коды 101-132, 141-172, 300-326, 330-366 и
370-377;
видимые графические символы - коды 041-176 и 240-377;
символы пробелов - коды 010-015 и 040. Идентификаторы newphra-
se в грамматике резервируются для будущих расширений в формате
RCS-файлов.
Никакой из идентификаторов newphrase не начнется с любого, уже
применяемого, ключевого слова. Узлы delta образуют дерево. Все уз-
лы, чьи номера состоят из единственной пары (например, 2.3, 2.1,
1.3 и т.п.), образуют ствол и компонуются через следующее поле в
порядке уменьшения чисел.
Поле head в узле admin указывает на начало этой последователь-
ности (то есть оно содержит самую верхнюю пару).
Узел branch в узле admin указывает по умолчанию на ветвь (или
версию) для большинства RCS-операций. Если там пусто, то по умолча-
нию ветвью будет самая верхняя ветвь в цепочке.
Все узлы delta, у которых номера состоят из 2n полей (n) (нап-
ример, 3.1.1.1, 2.1.2.2 и т.п.) компонуются следующим образом. Все
узлы, у которых первые 2n-1 поля номера - идентичны, компонуются
через поле next в порядке увеличения номеров. Для каждой такой пос-
ледовательности узел delta, номер которого идентичен первым
2n-2 номерам полей delta в этой последовательности, называется точ-
кой ветвления. Поле branches узла содержит список номеров первых
узлов всех последовательностей для которых он является точкой ветв-
ления. Этот список упорядочен по возрастанию номеров.
12.4.1. Пример
.
- 148 -
+-------------------------------------------------------------+
Ё Ё
Ё Head Ё
Ё Ё
Ё 2.1 Ё
Ё Ё Ё
Ё 1.3 -------- 1.3.1.1 Ё
Ё Ё Ё
Ё T Ё +----- 1.2.2.1 ----------- 1.2.2.2 Ё
Ё r Ё Ё Ё Ё
Ё u Ё Ё 1.2.2.1.1.1 Ё
Ё n Ё Ё Ё
Ё k Ё Ё Ё
Ё 1.2 -------- 1.2.1.1 ----------- 1.2.1.3 Ё
Ё Ё Ё
Ё Ё Branch Ё
Ё 1.1 Ё
Ё Ё
+-------------------------------------------------------------+
Рис. 24
12.5. Команды RCS
В следующую таблицу сведены все команды RCS. Все эти команды
описаны в "Utilities Reference".
-------------------------------------------------------------------
Команда: Описание:
-------------------------------------------------------------------
ci сохранение версии в RCS
со извлечение версии из RCS
ident идентификация файлов
rcs изменение атрибутов RCS-файла
rcsclean очищение рабочих файлов
rcsdiff сравнение RCS-версий
rcsmerge объединение RCS-версий
rlog печать регистрационных сообщений и другой информации
о RCS-файлах
-------------------------------------------------------------------
.
- 149 -