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.