Алексей Махоткин

домашняя страница

CVS — Система Управления Параллельными Версиями

Go to the first, previous, next, last section, table of contents.


Слежение за чужими исходными текстами

Если вы изменяете программу, чтобы она лучше соответствовала вашим нуждам, то вам, вероятно, захочется еще раз сделать те же самые изменения, когда появляется новая версия программы. CVS поможет вам с этой задачей.

В терминологии, используемой в CVS, лицо или организация, предоставившая вам текст программы, называется поставщиком. Неизмененное дерево каталогов из комплекта поставки помещается на отдельную ветку, которая называется ветка производителя. CVS резервирует для этой цели ветку с номером `1.1.1’.

Когда вы изменяете исходный текст и фиксируете изменения, то они оказываются в основном стволе. Когда поставщик выпускает новую версию программы, вы помещаете её на ветку производителя и копируете изменения в основной ствол.

Используйте команду import для создания и обновления ветки производителя. Когда вы импортируете новый файл, ветка производителя становится “головной” ревизией (HEAD), поэтому все, кто извлекает копию файла, получают эту ревизию. Когда локальные модификации фиксируются, они помещаются в основной ствол и становятся “головной” (HEAD) ревизией.

Начальный импорт

Используйте команду import для начального помещения исходных текстов в репозиторий. Для отслеживания чужих исходников полезно использовать метки поставщика и метки релизов. Метка поставщика – это символическое имя ветки (всегда имеющей номер `1.1.1’, если вы не использовали флаг `-b ветка. See section Несколько веток поставщика. Метки релизов – это символические имена конкретной версии продукта, например, `FSF_0_04’.

Заметьте, что import не изменяет содержимое каталога, в котором вызвана эта команда. В частности, этот каталог не становится рабочим каталогом CVS; если вы хотите работать с исходными текстами, сначала импортируйте их, затем извлеките их в другой каталог (see section Получение исходного кода).

Предположим, что у вас имеются исходные тексты программы, которая называется wdiff, находящиеся в каталоге `wdiff-0.04/’, и вы хотите сделать изменения для себя, и сохранить их, когда появится новая версия. Начните с импорта исходных текстов в репозиторий:

$ cd wdiff-0.04
$ cvs import -m “Import of FSF v. 0.04” fsf/wdiff FSF_DIST WDIFF_0_04

В вышеприведенном примере метка поставщика называется `FSF_DIST’, а единственная присвоенная метка релиза — `WDIFF_0_04’.

Обновление с помощью импорта

Когда появляется новая версия исходных текстов, вы импортируете их в репозиторий с помощью такой же команды import, которую вы использовали для начального импорта в репозиторий. Единственное различие – теперь вы используете другую метку релиза.

$ tar xfz wdiff-0.05.tar.gz
$ cd wdiff-0.05
$ cvs import -m “Import of FSF v. 0.05” fsf/wdiff FSF_DIST WDIFF_0_05

Для файлов, которые не были локально изменены, новые созданные ревизии становятся головными ревизиями. Если же локальные изменения были сделаны, команда import предупредит вас, что вы должны слить изменения в основной ствол и посоветует использовать для этого команду `checkout -j’.

$ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff

Вышеуказанная команда извлечет последнюю версию `wdiff’, объединяя в рабочую копию изменения, сделанные на ветке поставщика `FSF_DIST’ со вчерашнего дня. Если в процессе слияния появляются конфликты, то их нужно разрешить обычным способом (see section Пример конфликта), затем измененные файлы можно зафиксировать.

Использование даты, как предлагается выше, предполагает, что вы импортируете не более одной версии продукта в день. Если же это не так, вы всегда можете использовать что-нибудь типа такого:

$ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff

В этом случае вышеприведенные команды эквивалентны.

Возврат к последней версии от поставщика

Вы также можете полностью отменить локальные изменения и вернуться к последней версии от поставщика, установив головную ревизию в ветку поставщика для всех файлов. Например, если у вас есть извлеченная копия исходников в `~/work.d/wdiff’, и вы хотите вернуть все файлы в этом каталоге в то состояние, в котором вам предоставил их поставщик, наберите:

$ cd ~/work.d/wdiff
$ cvs admin -bWDIFF .

Вы должны написать `-bWDIFF’ без пробела после `-b’. See section Ключи команды admin.

Как обрабатывать двоичные файлы при импорте в CVS

Используйте ключ `-k’, чтобы сказать команде `import’, что файлы являются двоичными. See section Файл `cvswrappers’.

Как обрабатывать замену ключевых слов при импорте в CVS

Исходные тексты, которые вы импортируете, могут содержать ключевые слова (see section Подстановка ключевых слов). Например, поставщик мог использовать CVS или какую-нибудь другую систему, которая использует похожий синтаксис подстановки ключевых слов. Если вы просто импортируете файлы, то содержимое ключевых слов будет заменены вашим CVS. Вероятно, более удобно будет оставить ключевые слова в том виде, в котором они были у вашего поставщика, чтобы сохранить информацию об исходных текстах.

Чтобы сохранить содержимое ключевых слов, добавьте к команде cvs import при первом импорте ключ `-ko’. Это полностью выключит замену ключевых слов для этого файла, поэтому если хотите, то можете выборочно использовать разные ключи `-k’ с командами cvs update и cvs admin.

Несколько веток поставщика

Все примеры до этого момента подразумевали, что есть только один поставщик, от которого вы получаете исходные тексты. В некоторых ситуациях вы можете получать эти тексты из разных мест. Например, предположим, что вы работаете в проекте, в котором много различных людей и команд изменяют исходный код продукта. Существуют различные способы работы в такой ситуации, но иногда у вас есть несколько деревьев исходников, лежащих рядом, и всё, что вы хотите сделать – это положить их под CVS, чтобы они по крайней мере находились в одном месте.

Для обработки ситуаций, в которых поставщиков больше одного, вы можете задать команде cvs import ключ `-b’. Этот ключ принимает в качестве параметра номер ветки поставщика. По умолчанию используется `-b 1.1.1’.

Например, предположим, что есть две команды: красная и синяя, и обе посылают вам исходные тексты. Вы хотите импортировать результаты работы красной команды в ветку `1.1.1’ и использовать метку поставщика `RED’. Вы также хотите импортировать работу синей команды на ветку `1.1.3’ и использовать метку поставщика `BLUE’. В этом случае можно использовать такие команды:

$ cvs import dir RED RED_1-0
$ cvs import -b 1.1.3 dir BLUE BLUE_1-5

Заметьте, что если метка поставщика не соответствует ключу `-b’, то CVS не обратит на это внимания! Например,

$ cvs import -b 1.1.3 dir RED RED_1-0

Будьте осторожны; такие ошибки совершенно точно приведут, в лучшем случае, к недоразумениям. Не могу придумать полезной цели для возможности намеренного несовпадения в этом месте, а если вы придумаете такой способ, то не используйте его. Скорее всего, в следующих версиях CVS это станет ошибкой.


Go to the first, previous, next, last section, table of contents.

Comments