div.main {margin-left: 20pt; margin-right: 20pt}Введение в CVS Автор: Инга Захарова, arlantine@lnx.ru Опубликовано:
06.05.2002 Оригинал: http://www.softerra.ru/freeos/17718/
Перевод статьи Дженнифер Весперман (Jennifer
Vesperman) Introduction to CVS
Это первая из двух статей по CVS. Эта статья
предназначена для людей, собирающихся использовать уже установленную в системе
CVS. Здесь автор объясняет значение функций извлечения, обновления, добавления,
слияния и других. Во второй части, планируемой к выходу позднее в этом же
месяце, будет рассказано, как создавать CVS-архив и управлять им (для тех, кто
вынужден начинать с нуля – прим. Редактора).
CVS, или система параллельного контроля версий,
– это система для управления синхронной (одновременной) разработкой файлов.
Обычно используется в крупных программных проектах, но также актуальна для
работы системных администраторов, технических писателей и всех, кому приходится
работать с файлами.
CVS хранит файлы в центральном архиве,
настроенном таким образом (используя Unix стандарты доступа к файлам), чтобы
быть доступным для всех пользователей файлов. Отдаваемые архиву команды: «check
out» – извлечение файла из архива для работы над ним и «commit» – зафиксировать
изменения при возвращении в архив. Программа также сканирует файлы, перемещаемые
в архив или из архива, дабы предотвратить наложение одной версии на другую.
Система обеспечивает сохранение и хранение
записей обо всех изменениях файла, которые оказываются чрезвычайно полезными в
случаях, если начальник решит, что ему необходима та деталь, которую вы
выбросили еще месяц назад. Она также обеспечивает, чтобы для сохранения
резервной копии проекта было достаточно сохранения резервной копии архива
(обеспечивая хранение всех необходимых файлов внутри архива). Обычно CVS
используется как вспомогательное средство для управления проектами, но также
может использоваться для отдельных файлов.
Типичные пользователи
CVS создана для разработчиков – как для
индивидуальных, так и работающих в команде. Индивидуальных разработчиков CVS
обеспечивает архивом, работать с которым можно из дома, офиса или клиентского
сайта не таская за собой при этом кучу дисков. Система также обеспечивает
контроль версий, позволяя делать возврат к предыдущей версии без потери данных.
Для работающих в команде CVS также ведет запись данных, кто какую линию файла
изменил и предотвращает непосредственное наложение одной версии на другую.
Системные администраторы могут хранить в CVS
файлы настройки. Вы можете производить изменения в файле, использовать cvs
commit, проверять его. Если файл будет поврежден – вернитесь к версии до
изменения, даже если вы только что обнаружили сбой, зафиксированный шесть
месяцев назад.
Администраторы могут хранить в CVS дерево
настроек для серверных многомашинных систем. Хотите добавить новый сервер?
Просто используйте cvs checkout для дерева конфигураций для сервера
данного типа. Фиксирование всех изменений также поможет вам сохранить сведения о
том, кто что сделал и когда.
CVS также полезна для писателей. Я храню эти
статьи в дереве CVS – если я потеряю локальную копию, то она автоматически
восстановится из резервной. Это также актуально в случае сотрудничества с
кем-либо, или если я вдруг обнаружу, что мне нужно восстановить раздел, который
уже удален.
Пояснения к примерам
Примеры, приведенные в этой статье, предполагают
наличие уже существующего архива проекта.
Следующая статья в этом выпуске будет называться
«Администрирование CVS» и расскажет, как создать CVS-архив, разделить проект на
ветви и как управлять архивом. А сейчас просмотрите cvs init и cvs
import в руководстве по cvs (man cvs).
Необходимые переменные среды
Если вы предполагаете использовать один архив,
установите переменную среды $CVSROOT для описания подробного пути архива,
сделайте это в формате :protocol:user@host:path. Это должно выглядеть
примерно следующим образом::ext:jenn@cvs.example.com.au:/home/cvs.
Из соображений безопасности установите
переменную среды $CVS_RSH равной ssh. Для доступа к архиву
на удаленной машине CVS по умолчанию использует rsh.
Доступ к дереву CVS: извлечение
CVS хранит файлы в центральном архиве, но
пользователи работают непосредственно с рабочей копией файла.
Создайте директорию, в которой будете работать. Я склонна использовать
~/cvs.
Перейдите в эту директорию.
Выполните cvs checkout имя_модуля, например, cvs checkout
example. (имя_модуля – это название для родственной группы файлов в
CVS). Если у вас нет переменной среды $CVSROOT или вы собираетесь
использовать разные архивы, то тогда для извлечения модуля используйте cvs
-d путь-к-архиву. Извлеченные копии файлов и субдиректорий этого
модуля будут помещены в вашу директорию cvs. cvs$ ls example
cvs$ cd example; ls
CVS src
cvs/example$ cd CVS; ls
Entries Repository Root
Директория CVS – специальная директория,
которая используется CVS для ее собственных целей. CVS/Entries хранит
список известных CVS файлов и субдиректорий. CVS/Repository содержит
описание маршрута до соответствующей директории в архиве. CVS/Root
содержит описание пути к архиву, так что вам не придется еще раз применять для
этих файлов опцию -d путь-к-архиву.
Учтите, что CVS/Root заменяет переменную
среды $CVSROOT, так что, если меняете архив, то вам придется заново
извлекать модуль. cvs/src$ ls
CVS Makefile sample.h sample.c
Директория src содержит исходные файлы
приведенного в примере проекта. sample.c, sample.h и
Makefile – обычные файлы в рабочей копии, а в архиве они сохраняются в
формате, регистрирующем все изменения.
Получение изменений: обновление cvs
Каждый день перед началом работы и всякий раз,
когда кто-нибудь еще вносит и фиксирует какие-либо изменения, войдите в свою
рабочую директорию и запустите cvs update. Таким образом будет
произведено сравнение ваших рабочих копий с архивными копиями и вам будут
импортированы все измененные файлы. cvs update -d также предоставит в
ваше распоряжение любые новые директории.
Обновление записей о состоянии каждого файла во
время проверки:
U file
Успешно обновлен
A file
Добавлен но еще не зафиксирован (нужно запустить cvs commit)
R file
Удален но еще не зафиксирован (нужно запустить cvs commit)
M file
Модифицирован в вашей рабочей директории: файл в архиве был изменен, а
файл в вашей рабочей директории по времени создания старше, чем последний (по
времени), проверенный CVS или в файлы в архиве были внесены изменения, которые
система могла бы безопасно объединить с вашими.
C file
Существующий конфликт между архивной копией и вашей копией требует ручного
вмешательства
? file
файл есть в вашей рабочей директории, но отсутствует в архиве, и CVS не
знает, что с ним делать
Когда изменения вступают в конфликт: объединение файлов
Если CVS не может произвести успешное
объединение измененного файла и архивной копии, она сообщит о возникшем
конфликте в данных, выводимых cvs update. Оригинал файла хранится в
.#file.version в рабочей директории, и полученный в результате
объединения файл хранится под именем оригинального файла. cvs/example$ cvs update
jenn@cvs.example.com.au's password:
cvs server: Updating .
RCS file: /home/cvs/example/sample.c,v
retrieving revision 1.3
retrieving revision 1.4
Merging differences between 1.3 and 1.4 into sample.c
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in sample.c
C sample.c
CVS описывает объединение конфликтующих строк в
окружении CVS-тэгов. CVS не может автоматически произвести объединение
конфликтных версий, когда в разных версиях файла изменена одна и та же строка.
<<<<<<< sample.c
Deliberately creating a conflict.
Let's make a conflict.
>>>>>>> 1.4
Внесение изменений: зафиксировать в cvs
Когда ваши файлы извлечены, можете редактировать
и компилировать их обычным образом. Добавьте изменения в архив при помощи
команды cvs commit. Для запуска этой команды нужно находиться в иерархии
выше, чем измененные вами файлы – вы можете запустить ее из базы вашей рабочей
копии.
Вы также можете использовать команду cvs
commit имя_файла, которая зафиксирует отдельный файл или рекурсивно
зафиксирует директорию. У разных проектных команд складываются различные мнения
о том, как часто использовать cvs commit. На этот счет есть два хороших
практических совета: «всякий раз, когда компиляция прошла нормально» и «каждый
день перед ланчем и перед уходом». cvs/example$ cvs commit
cvs commit: Examining .
cvs commit: Examining src
jenn@cvs.sample.com.au's password:
CVS проверяет каждую директорию и субдиректорию
ниже текущей рабочей директории. Все файлы, которые известны CVS будут проверены
на предмет изменений. Если ваш cvs-архив расположен не на локальной машине, CVS
запросит пароль для удаленной машины.
После этого CVS откроет редактор, по умолчанию
пригодный для вашей среды – в зависимости от переменных среды $CVSEDITOR
или $EDITOR. Добавьте к соответствующим файлам примечания об изменениях.
CVS:--------------------------------------------------
CVS: Enter Log. Lines beginning with 'CVS:' are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Modified Files:
CVS: example/src/sample.h example/src/sample.c
CVS:---------------------------------------------------
Я настоятельно рекомендую создавать подробные
примечания об изменениях – если вы собираетесь вернуться к предыдущей версии и
все, что у вас есть, это сообщения «исправлено несколько ошибок», то без
использования команды cvs diff вы не будете знать, к какой версии
возвратиться.
Если существует вероятность конфликта, то cvs
commit не будет работать. Исправьте ситуацию, запустив в архиве команду
cvs update – CVS попытается объединить файлы и запросит о помощи
человека, если не сможет выполнить слияние без потери данных. cvs server: Up-to-date check failed for 'cvs_intro.html'
cvs [server aborted]: correct above errors first!
cvs commit: saving log message in /tmp/cvst7onmJ
Создание новых файлов: добавление в cvs
Если CVS не знает, что делать с файлами, то
после процесса фиксации и в процессе cvs update она выводит их с отметкой
«знак вопроса». Прежде, чем CVS их распознает, они должны быть внесены в архив.
Используйте cvs add имя_файла, чтобы отметить новый файл для
включения в архив. CVS не поместит файл в архив, пока вы не выполните cvs
commit.
Директории добавляются с помощью этой же
команды. Нельзя добавлять содержащиеся в директории файлы, прежде чем добавите
саму директорию.
Удаление файлов: удаление в cvs
Чтобы отметить файл для удаления из списка
рабочих копий, используйте команду cvs remove имя_файла. Перед
тем, как CVS удалит файл из архива, вы должны будете удалить его из файловой
системы. В действительности CVS не удаляет файл полностью, она помещает его в
особую субдиректорию архива, называемую Attic.
Директории не удаляются
CVS не удаляет директории – это нарушит запись
изменений. Директории могут быть удалены при изменении архива – этот вопрос
обсуждается в статье «Администрирование CVS».
Заключительные слова
CVS очень полезна в качестве утилиты для
совместных разработок, поддержания истории изменения файла и обеспечивает общую
базу данных для файлов всех видов. Также очень стоящая вещь для исследований и
игр.
Для дополнительного чтения
man cvs
man 5 cvs
info cvs – есть хорошие разделы «что есть CVS» и «что не есть CVS».
Также в руководстве есть полезные пояснения. Раздел «Архив» более глубоко
рассматривает резервные протоколы.
Из колонки Big Scary Demons: BSD Tricks: CVS
На Sourceforge есть несколько статей по CVS. Посмотрите разделы 6 и 7 на
странице Sourceforge Site Docs.
Дженнифер Весперман (Jennifer Vesperman)
нравится думать, что она родилась с силиконовой пластиной, прикрепленной к
позвоночнику, но не смогла заставить родителей признаться. Она вносит свой вклад
в Open Source большей частью как пользователь и адвокат. Jenn является в
настоящее время координатором Linuxchix.org.
|