Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Конфликты и слияние
В ситуации, когда два разработчика одновременно пытаются поместить в ре-
позиторий обновленные версии одного и того же файла, CVS автоматически
откладывает операцию для одного из них. Второй разработчик выполняет в этом случае команду cvs update, которая вносит изменения, сделанные первым разработчиком, в локальную версию файла. Во многих случаях изменения затрагивают различные области файла, поэтому слияние происходит успешно. Однако если оба разработчика внесли изменения в одну и ту же область файла, второй из них будет вынужден разрешить противоречия перед помещением файла в репозиторий. Разрешение противоречий означает изучение области (или областей) файла, в которой возникли проблемы, и выбор
среди нескольких версий изменений или внесение изменений, разрешающих конфликт.
CVS может определить только чисто текстовый конфликт, но собственно
разрешение противоречий связано с сохранением логической непротиворечивости проекта в целом. Поэтому разрешение противоречий иногда связано с редактированием других файлов, помимо файла, непосредственно содержащего конфликт версий.
Например, если один из разработчиков добавляет параметр в определение
функции, может понадобиться изменить все вызовы этой функции для передачи дополнительного параметра. Это логический конфликт, поэтому его нахождение и разрешение является задачей разработчиков (которые могут взять себе в помощь такие инструменты, как компилятор и отладчик); CVS на эту проблему не обратит внимания.
В любой ситуации слияния, независимо от того, возникли конфликты или
нет, разработчик, помещающий файлы вторым, может по желанию произвести дополнительную проверку окончательной версии проекта, поскольку она изменилась со времени исходного обновления версии. Если все в порядке, версию можно поместить в репозиторий.

Идентификаторы версий
CVS отслеживает версии файлов по номерам обновлений, которые могут использоваться для извлечения определенной версии файла из репозитория. Кроме того, можно создавать символьные имена (symbolic tags), или метки,
для того чтобы обращаться к группе файлов (либо проекту в целом) по единственному идентификатору даже тогда, когда номера версий файлов различны (в большинстве случаев они различны). Эта возможность часто используется для отслеживания выпускаемых версий и других важных промежуточных остановок в проекте.
Например, символьное имя hello-1_0 может быть связано с версией 1.3 файла hello.c и версией 1.1 файла сборки Makefile (символьные имена создаются командами tag и rtag).

Ветвление
Простейшей формой разработки является линейная разработка, в которой существует последовательность версий файла, каждая из которых прямо наследует предыдущую. Во многих проектах вполне достаточно строго линейного процесса разработки, но в крупных проектах (крупных по количеству файлов, количеству разработчиков и/или размеру сообщества пользователей) зачастую требуется более сложное управление и дополнительные возможности. Иногда желательно произвести пробную разработку, не прерывая при этом основную линию развития проекта. В других случаях ошибки в текущей выпущенной версии должны быть исправлены, в то время как работа над следующей версией идет своим чередом. И в том и в другом случаях решением является создание ветви (развилки) в соответствующей точке развития проекта. Если в какой-то момент потребуется интегрировать некоторые или все изменения ветви в основную линию разработки, они могут быть слиты (объединены).
Ветвление выполняется командой tag-Ь, а объединение — командой update -j.

Инструмент CVS
В данном разделе представлены общие сведения о CVS.
Формат команд CVS
Команды CVS имеют следующий вид:
cvs global__options command command_options
Например, приведем простую последовательность команд, в которой отображены оба вида параметров в контексте создания репозитория, импортирования существующих файлов и выполнения нескольких распространенных операций над ними:
user@localhost$ cvs -d /usr/local/cvsrep init useriaiocalhostS cd "/work/hello
user@localhost$ cvs -d /usr/local/cvsrep import -m 'Import' hello vendor start
user@localhost$ cd ..
user@localhost$ mv hello hello.bak
user@localhost$ cvs -d /usr/local/cvsrep checkout hello
user@localhost$ cd hello
user@localhost$ vi hello
user@localhost$ cvs commit -m 'Fixed a typo'
user@localhost$ cvs tag hello-l_0
user@localhost$ cvs remove -f Makefile
user@iocalhost$ cvs commit -m 'Removed old Makefile'
user@localhost$ cvs upd -r hello-1_0
user@localhost$ cvs upd -A
Некоторые глобальные параметры являются общими для команд администратора и пользователей, а некоторые являются специфичными для
каждой из этих категорий. Общие глобальные параметры описаны в следующем разделе, а специфичные для пользователей и администратора - в разделах «Справочник пользователя CVS» и «Справочник администратора CVS», соответственно.

Общие глобальн ые параметры
В табл. 14.1 приведены глобальные параметры, которые могут использоваться как в командах пользователей, так и в командах администратора.

 

Возможные проблемы
Данный раздел посвящен некоторым аспектам CVS, которые иногда могут вызвать путаницу.
Работа с файлами в CVS
Хотя каталоги поддерживаются, версии для них не отслеживаются, как это делается для обычных файлов. Это особенно важно на ранних стадиях проекта, когда структура еще может быть нечеткой. Кроме того, если проект подвергается заметным изменениям, структура, скорее всего, изменится. Смотрите далее раздел «Тонкая работа с репозиторием».
Работа с текстом в CVS
Не существует эквивалента программы diff для двоичных файлов, хотя поддержки CVS таких файлов обычно бывает достаточно. Используйте команду admin -kb, чтобы указать CVS на двоичный файл.
Работа со строками в CVS



   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru