|
Персональные инструменты |
|||
|
CVS:Краткое введениеМатериал из CustisWikiСодержаниеГлоссарий
Структура информации под CVSСистема контроля версий позволяет вести конкурентную работу с набором текстовых файлов. Все файлы расположены в специальном хранилище - Репозитории CVS, который может размещаться на отдельном выделенном сервере (предпочтительный вариант работы), но может размещаться и на локальном компьютере пользователя (учет версий может быть удобен и в случае однопользовательской работы.
При этом системой обеспечивается хранение всех версий файла, регистрация изменений от лица конкретного пользователя с точностью до строки, а также отслеживание возникших конфликтов. CVS эффективно работает с текстовыми файлами, позволяя делать построчное сравнение версий, может также использоваться для хранения двоичных файлов, но, естественно, без сервиса по сравнению версий. Кроме того, если текстовые файлы хранятся довольно эффективно, то есть, фактически, имеется одна версия и журнал изменений, то двоичный файл при каждой правке запоминается целиком. После получения последней версии файлов проекта с сервера большая часть работы сводится к следующим основным действиям:
Помимо простейшего цикла работы у CVS есть множество дополнительных возможностей. Основной цикл работы с CVSПод основным циклом работы понимается использование стандартных команд CVS, позволяющих читать файлы, изменять их и записывать изменения. Каждый CVS-модуль (полное дерево каталогов), помещенный под контроль CVS, хранится в центральном репозитарии. Вся работа выполняется с локальной копией CVS-модуля изменения из которой переносятся в репозитарий по готовности. Для этого используется несколько основных команд. checkoutДля создания локальной копии CVS-проекта необходимо выбрать каталог для проектов на локальном диске (напр. D:\projects), в котором будет создан подкаталог данного проекта. В этом каталоге выполнить команду cvs checkout имя_проекта После этого в каталоге D:\projects\имя_проекта появляется локальная копия всего дерева последней версии указанного проекта. Возможные значения параметра имя_проекта можно увидеть простым просмотром файла CVSROOT/modules, который можно запросить командой: cvs checkout CVSROOT commitПосле того, как проверено, что внесенные Вами изменения оставили проект в рабочем (по крайней мере, в компилируемом) состоянии, следует закрепить изменения в репозитарии. В принципе, можно использовать разную политику закрепления изменений (как можно чаще, как можно реже, только после успешной компиляции и т. д.). Выбор конкретной политики не влияет на работу самого CVS и обусловлен требованиями проекта. Закрепление изменений производится командой: cvs commit -m "[Комментарий]" [file] либо не указывая имя файла, что закрепляет все изменения в выбранной директории. Если не указан комментарий, то CVS запускает редактор для ввода пояснений в журнал версий. Возможно, что изменения вносились в старую версию файла и с тех пор файл был поправлен. Об этом cvs commit выдаст сообщение: cvs server: Up-to-date check failed for `file' cvs [server aborted]: correct above errors first! и надо будет выполнить cvs update для конфликтного файла, а затем, возможно, разрешить конфликт (процедура описана ниже). Если одновременно закрепляются изменения в нескольких файлах, то если конфликт был в одном из них, то все закрепление сделано не будет. updateСинхронизация с репозитарием может быть выполнена в любой момент командой cvs update [-dP] [file] Ключ -d используется для проноса новых директорий, появившихся в проекте. Ключ -P удаляет пустые директории. Дело в том, что в CVS нельзя удалить директорию. Можно лишь убрать все файлы из директории, тогда по команде cvs update -P она будет стерта с локальной машины. Данная команда является одной из самых безопасных, так как ничего не меняет на сервере. Отметим также, что если файл на локальном компьютере был испорчен по каким-либо причинам, например неверно отредактирован, то его можно восстановить удалив его на локальной машине и заново считав с сервера командой cvs update [file]. При работе команда cvs update выдает протокол действий в виде списка имен файлов, предваряемых одной буквой — статусом файла. Значения букв:
Проект может содержать директории, которые образованы специальным образом ссылкой на директории со стандартными файлами. Команда cvs update не копирует такие директории в вашу локальную копию проекта. Такие директории копируются командой cvs checkout имя_проекта то есть той же командой, которая используется для создании копии проекта. Если в директории завести файл с именем .cvsignore и поместить в него список шаблонов файлов, которые не должны помещаться под CVS, то на них «?» выдаваться не будет. Если было внесено много исправлений и команда выдала большой список, ее можно запустить повторно — она выдаст только файлы с модификациями и конфликтами. Конфликт означает, что правки файла, сделанные пользователем локально конфликтуют с правками, внесенными в репозитарий кем-то еще. Соответствующие места в файле будут помечены: <<<<<<< filename Текст из локального файла ======= Текст из репозитария >>>>>>> version Перед закреплением изменений необходимо эти конфликты разрешить. addДобавление директории или файла выполняется командой cvs add file.txt Для файла необходимо затем выполнить cvs commit. Под CVS можно хранить также бинарные файлы, хотя и не так эффективно, как текстовые, т. к. в этом случае, CVS будет полностью хранить каждую версию файла. Бинарные файлы добавляются с опцией «-kb»: cvs add -kb file.jpg removeДля удаления файла выполняются команды: cvs remove -f file cvs commit -m "[комментарий]" file Заметим, что команда releaseЕсли вдруг возникла необходимость убрать файлы из локальной CVS директории, то необходимо делать это командой: cvs release -d имя_проекта в основном каталоге проекта. При этом производится проверка соответствия локальной директории и состояния репозитария. Если есть конфликтующие или расходящиеся файлы, то будет выдана диагностика о их наличии. Все расхождения нужно проанализировать и устранить. После этого необходимо повторно выполнить ту же команду, проверить, что измененных файлов нет, и ответить на задаваемый вопрос «Y». После этого все файлы проекта будут удалены. Правила работы с CVSПри использовании CVS нужно придерживаться нижеописанных правил:
Расширенные возможности CVSРассмотрим функции и команды CVS, хотя и относительно редко используемые, но полезные во многих специальных случаях. logДля того, чтобы получить историю работы с файлом, нужно использовать команду cvs log [file] Результат работы рекомендуется перенаправлять в отдельный файл, который потом смотреть в произвольной кодировке. Выдается история изменений данного файла с номерами версий и пользователями, которые закрепляли данные версии. updateДля того, чтобы получить конкретную версию файла, необходимо набрать команду cvs update -r номер_версии file Из репозитария будет загружена версия с данным номером. Если в файле на локальном компьютере производились изменения, то они будут слиты с версией с запрашиваемым номером, что может привести к странным результатам и, обычно, после этого требуется устранить конфликт. липкие меткиЛокальный файл, который был получен путем считывания предыдущей версии считается замороженным (имеющим «sticky tag») и изменения в нем не будут закрепляться в репозитарии. Проверить наличие этого тага можно путем вызова команды для получения статуса файла cvs status [file] В результате исполнения выдается полная информация о версиях данного файла. Для того, чтобы вернуться к последней версии файла, необходимо набрать команду cvs update -A file Команда обеспечивает снятие всех «sticky tag» с выбранного файла, она также синхронизирует файл с последней версией с сервера. Если мы вдруг произвели изменения в файле с установленным «sticky tag», то изменения не будут потеряны — они будут пронесены в последнюю версию файла, при этом естественно возникнет конфликт. diffДля просмотра изменений файла от версии к версии нужно вызвать команду cvs diff -r версия_1 [-r версия_2] file Вторую версию можно не указывать, тогда будет взят текущий файл. Результат следует перенаправлять в отдельный файл. В файле будет приведен список отличий между версиями. annotateДля того, чтобы посмотреть, кто что написал в файле, необходимо использовать команду cvs annotate file Результат надо направлять в файл. В результате, для каждой строки исходного файла будет выведено имя пользователя и версия, в которой появилась данная строка. Управление ветками под CVSДля поддержки нескольких версий описаний библиотек, либо стандартов на разработку, необходимо использовать наиболее сложные возможности CVS — систему веток. Путь развития каждого файла под CVS может представлять собой дерево (вообще говоря, даже многопотоковый граф). От основного ствола — основного пути изменения файла можно отщепить произвольное количество веток. На определенном этапе развития ветки могут быть снова слиты в одну ветку.
Для проекта таги используются для пометки определенных срезов информации. Эти срезы могут перемещаться и изменяться со временем. Помимо обычных тагов бывают таги веток. Если мы хотим завести новую ветку у файла, то мы обязаны пометить ее веточным тагом. Отметим, что при поиске файла с тагом неважно, ищем мы файл по веточному тагу, либо по обычному. Когда ветка выделена — она продолжает развиваться независимо, при этом последняя версия файла ветки помечена тагом этой ветки. Для пометки файла тагом нужно использовать команду cvs tag -F таг Она пометит все файлы в директории и поддиректориях указанным тагом. Использование -F позволяет сдвигать таг, если он раньше был установлен. Для того, чтобы создать ветку, нужно вызвать нижеследующие команды. Сначала нужно считать версию файла помеченную данным тагом — для проверки. cvs update -r таг_ветки file Далее следует проверить таг и признак тага — может быть ветка уже была создана. Также нужно проверить номер версии файла — отсюда ли мы хотим делать ветку. Вызвав команду cvs status file произведем проверку. Если мы хотим делать ветку из другого места, то мы должны считать нужную версию файла и сделать веткой при помощи команды cvs tag -F -b таг_ветки file Команда создает ветку этого файла для стандарта с данным номером. Опция -F означает, что старый таг с этим именем будет удален. Для того, чтобы считать ветку файла, необходимо вызвать команду cvs update -r таг_ветки При этом на локальную машину будет помещены файлы из этой ветки, а за отсутствием файла в этой ветке — из основного ствола. После этого локальная машина начинает работать с данной веткой. Команда update будут считывать более новые файлы этой ветки. Для взятия последней версии основного ствола нужно использовать команду cvs update -A file Администрирование репозитарияПод администрированием репозитария понимается действия по созданию, удалению и импорту репозитария и отдельных CVS-модулей. Создание CVS-модуля:
cvs import custis/path vendortag releasetag где
Пример такой команды cvs import custis/projects/adb CUSTIS ADB_0_0
cvs checkout CVSROOT/modules
cvs release -d CVSROOT
ТестыМожете проверить свои знания CVS интерактивной системой тестирования:
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion». Репликация: База Знаний «Заказных Информ Систем» → «CVS:Краткое введение» |
||