Если вы модифицируете программу, учитывая особенности применения в вашей организации, то вы захотите, чтобы в следующих версиях данной программы ваши изменения также были включены. Система CVS также может помочь вам в этом.
В терминологии, которая используется в CVS, поставщик программ называется вендор (vendor). Немодифицированная программа, полученная от вендора, помещается в хранилище в отдельную ветвь, которая именуется вендорной ветвью (vendor branch). CVS резервирует для этой цели номер ветви 1.1.1.
Когда вы модифицируете исходники и производите операцию commit, то ваша версию попад©т в основной ствол (main trunk). Когда вендор приготовил новую версию программы, вы производите операцию commit в вендорной ветви и копируете модификации в основной ствол.
Для создания и обновления вендорной ветви используется команда import. Когда вы импортируете новый файл, вендорная ветвь становится главной версией (head revision). Иными словами, любой, кто выполняет операцию checkout, получит именно это версию, если специально не указано ничего иного. Когда изменения в рабочем каталоге вносятся в хранилище операцией commit, то они помещаются в основной ствол, который и становится главной версией (head revision).
Для первоначального помещения исходников в хранилище следует использовать команду import. Когда вы используете import для поддержки ваших изменений в поставляемых со стороны исходниках, то тег vendor tag и теги release tags очень полезны. Тег vendor tag является символическим именем ветви. Обычно эта ветвь имеет номер 1.1.1, если вы не использовали параметр -b BRANCH. Теги release tags являются символическими именами отдельных версий, например, SF1005.
Заметим, что команда import не изменяет содержимого каталога, откуда импортируются исходники. В частности, эта команда не устанавливает этот каталог в качестве рабочего каталога системы CVS. Если вы хотите работать с исходниками, то их следует импортировать, затем выполнить команду checkout в рабочий каталог.
Положим, вы имеете исходники программы с именем wusage в каталоге wusage-0.1 и вы хотели бы сделать изменения в исходниках для ваших персональных нужд так, чтобы использовать эти изменения и в будущих версиях wusage. Вы начинаете с помещения ваших исходников в═хранилище:
$ cd wusage-0.1 $ cvs import -m "Import of WUSAGE v. 0.1" wusage WDIST WUSAGE_0_1Вендорный тег имеет имя WDIST, а единственный тег версии имеет имя WUSAGE_0_1.
Когда новая версия исходников получена от поставщика, вы помещаете е© в хранилище той же самой командой import, которую вы использовали при создании хранилища. Единственное отличие состоит в различных тегах:
$ tar xfz wusage-0.2.tar.gz $ cd wusage-0.2 $ cvs import -m "Import of WUSAGE v. 0.2" wusage WDIST WUSAGE_0_2Для файлов, которые не были модифицированы локально, вновь создаваемая версия становится главной версией (head revision). Если вы сделали какие-то изменения в конкретном файле, то команда import предупредит вас, что вы должны объединить изменения в основном стволе и попросит вас выполнить checkout -j.
$ cvs checkout -jWDIST:yesterday -jWDIST wusageВышепривед©нная команда создаст рабочую копию наиболее свежей версии wusage и объединит в рабочей копии изменения, сделанные в вендорной ветви со вчерашнего дня. Если возникнут конфликты, то они разрешаются обычным образом. После этого модифицированные файлы могут быть помещены в хранилище командой commit.
Использование даты, как описано выше, предполагает, что вы импортируете не более одной версии программного продукта в день. Если же вы импортируете более одной версии программного продукта в день, то вам следует использовать команду:
$ cvs checkout -jWUSAGE_0_1 -jWUSAGE_0_2 wusage
Вы можете проигнорировать все локальные изменения и получить наиболее свежую версию, которую поставил вам вендор. Это выполняется переходом к вендорной ветви для всех файлов. Например, если вы имеете копию исходников в локальном рабочем каталоге work.d/wusage и хотите вернуться к наиболее свежей версии, которая была вам поставлена для всех файлов в данном каталоге, то вы должны сделать
$ cd work.d/wusage $ cvs admin -bWDIFF .Не должно быть пробелов между -b и значением в последней строке примера.
Исходники, которые вы импортируете могут содержать ключевые слова. К примеру, поставщик может использовать систему CVS или другую систему поддержки версий, которая использует подобные ключи. Если вы просто импортируете файлы в режиме, который используется по умолчанию, то значения ключей будут присвоены такие, которые определяются вашим вариантом системы CVS. Однако, может оказаться более удобным поддерживать подстановку ключевых слов, которые обеспечивает поставщик, поскольку такая подстановка обеспечивает вас информацией об источнике, откуда получены исходники.
Чтобы обеспечить подстановку ключевых слов, установленную поставщиком, следует использовать параметр -ko в команде import, когда вы импортируете файл в первый раз. Этот параметр выключит подстановку ключевых слов для всего файла. Если вы захотите более селективно выбирать режим подстановки, то вам следует подумать, как использовать параметр -k в командах update и admin.
Все примеры до сих пор предполагали, что имеется лишь одна вендорная ветвь, из которой вы получаете исходники. В ряде случаев вы можете получить исходники из нескольких мест. Предположим, вы связаны с проектом, который ведут несколько групп разработчиков, которые модифицируют программы. Имеется несколько путей, как этим можно управлять, но один из самых эффективных - это сложить все варианты в хранилище CVS.
Для управления ситуацией, когда имеется более, чем один поставщик, полезно использовать параметр -b в команде cvs import. По умолчанию -b 1.1.1. Для простоты, предположим, что у нас две группы разработчиков: красные и голубые. Они посылают вам свои исходники. Когда вы хотите использовать исходники красных, вы используете тей RED. Если вы хотите использовать исходники голубых, то следует использовать тег вендора 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Будьте внимательны: этот вид несоответствия гарантированно привед©т к конфузиям.