Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Введение в CVS

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.




  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте