go to the first, previous, next, last section, table of contents.
ревизии
в большинстве случаев использования cvs не требуется сильно
беспокоиться о номерах ревизий; cvs присваивает номера типа
если необходимо отслеживать набор ревизий, содержащих более одного файла, например, ревизии, попавшие в конкретную версию программы, используются метки, т. е. буквенные имена ревизий, которые можно присвоить каждому номеру ревизии файла. номера ревизийкаждая ревизия файла имеет уникальный номер ревизии. номера ревизий выглядят как `1.1', `1.2', `1.3.2.2' или даже `1.3.2.2.4.5'. номер ревизии всегда содержит четное количество десятичных чисел, разделенных точкой. по умолчанию ревизия 1.1 -- первая ревизия файла. в номере каждой следующей ревизии самая правая цифра увеличивается на единицу. вот пример нескольких ревизий, новые версии находятся правее старых: +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! +-----+ +-----+ +-----+ +-----+ +-----+ может также оказаться, что в номерах ревизий будет больше одной точки, например, `1.3.2.2'. такие номера означают ревизии, находящиеся на ветках (see section создание ветвей и слияние); эти номера подробно описаны в section ветки и ревизии. версии и ревизиикак описано выше, у файла может быть несколько ревизий. у программного продукта может быть несколько версий. программным продуктам обычно дают номера версий типа `4.1.1'. назначение номеров ревизий
по умолчанию, cvs назначает номер ревизии, оставляя первую
цифру и увеличивая вторую. например,
при добавлении нового файла вторая цифра всегда будет единицей, а
первая цифра будет равняться самой большой первой цифре номера
ревизии каждого файла в каталоге. например, если в каталоге
находятся файлы с ревизиями
обычно совершенно не требуется заботиться о номерах ревизий ---
проще думать о них, как о служебных номерах, за которыми следит
cvs, а также о метках, обеспечивающих хороший способ
различать, например, версию 1 вашего продукта от версии 2
(see section метки ревизий). однако, если вы хотите установить номер
ревизии, вам поможет ключ командной строки `-r' команды
например, для того, что задать всем вашим файлам, включая те, что не изменились, номер ревизии 3.0, выполните команду $ cvs commit -r 3.0 заметьте, что номер, который вы указываете вместе с ключом `-r', должен быть больше любого существующего номера ревизии. скажем, если существует ревизия 3.0, вы не можете сказать `cvs commit -r 1.3'. если вы хотите параллельно отслеживать несколько версий программного продукта, вам нужно создать ветку (see section создание ветвей и слияние). метки ревизийномера ревизий живут своей собственной жизнью. они могут совершенно никак не соотноситься с номером версии вашего программного продукта. в зависимости от того, как вы используете cvs, номера ревизий могут измениться несколько раз между двумя выпусками продукта. например, файлы с исходными текстами rcs 5.6 имеют такие номера ревизий: ci.c 5.21 co.c 5.9 ident.c 5.3 rcs.c 5.12 rcsbase.h 5.11 rcsdiff.c 5.10 rcsedit.c 5.11 rcsfcmp.c 5.9 rcsgen.c 5.10 rcslex.c 5.11 rcsmap.c 5.2 rcsutil.c 5.10
вы можете использовать команду
вы захотите выбрать какое-либо соглашение об именах меток,
основываясь, например, на имени программы и номере ее версии.
например, можно взять имя программы, за которым следует номер
версии, в котором символ `.' заменен на `-', так что
cvs 1.9 будет помечен как в нижеследующем примере показано, как добавить метку к файлу. команды должны выполняться внутри вашего рабочего каталога, то есть там, где находится файл `backend.c'. $ cvs tag rel-0-4 backend.c t backend.c $ cvs status -v backend.c =================================================================== file: backend.c status: up-to-date version: 1.4 tue dec 1 14:39:01 1992 rcs version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v sticky tag: (none) sticky date: (none) sticky options: (none) existing tags: rel-0-4 (revision: 1.4)
полный синтаксис команды редко требуется помечать одиночные файлы. гораздо чаще нужно пометить все файлы, составляющие модуль, в стратегической точке цикла разработки, например, когда выпущена новая версия. $ cvs tag rel-1-0 . cvs tag: tagging . t makefile t backend.c t driver.c t frontend.c t parser.c (если вы дадите cvs каталог в качестве параметра командной строки, она обычно оперирует над всеми файлами в этом каталоге и, рекурсивно, ко всем подкаталогам, которые тот содержит. see section рекурсивное поведение.)
команда $ cvs checkout -r rel-1-0 tc это полезно, например, если кто-то заявляет, что в той версии была ошибка, но вы не можете найти ее в текущей рабочей копии.
вы можете также извлечь модуль по состоянию на любую дату.
see section ключи команды checkout. задав команде когда вы помечаете более одного файла, вы можете думать о метке как о кривой, проведенной по таблице имен файлов и их номеров ревизий. скажем, у нас есть пять файлов со следующими ревизиями: file1 file2 file3 file4 file5 1.1 1.1 1.1 1.1 /--1.1* <-*- tag 1.2*- 1.2 1.2 -1.2*- 1.3 \- 1.3*- 1.3 / 1.3 1.4 \ 1.4 / 1.4 \-1.5*- 1.5 1.6 когда-то в прошлом, ревизии, отмеченные звездочками, были помечены. вы можете думать о метке, как о ручке, приделанной к кривой, нарисованной на помеченных ревизиях. когда вы тянете за ручку, вы получаете все помеченные ревизии. еще одним способом представления является прямая линия, вдоль которой вы смотрите на набор файлов, и вдоль которой выровнены помеченные ревизии, например: file1 file2 file3 file4 file5 1.1 1.2 1.1 1.3 _ 1.1 1.2 1.4 1.1 / 1.2*----1.3*----1.5*----1.2*----1.1 (--- <--- look here 1.3 1.6 1.3 \_ 1.4 1.4 1.5 что пометить в рабочем каталоге
пример в предыдущей секции демонстрирует один из самых
распространенных способов выбрать, какие ревизии пометить, а
именно: выполнение команды
возможно, неожиданным обстоятельством того факта, что $ cvs tag -c rel-0-4 cvs tag: backend.c is locally modified cvs [tag aborted]: correct the above errors first! как помечать по дате или ревизии
команда нижеследующие ключи командной строки указывают, по какой дате или номеру ревизии помечать. see section стандартные ключи командной строки, где приведено полное описание.
команда cvs tag -r 1.4 backend.c удаление, перемещение и удаление метокобычно метки не изменяются. они существуют, чтобы хранить историю репозитория, поэтому изменять и удалять их обычно не нужно. однако же, могут быть случаи, в которых метки используются лишь временно или случайно помечаются неверные ревизии. таким образом, нужно удалить, переместить или переименовать метку. предупреждение: команды в этой секции опасны, они навсегда уничтожают информацию об истории и восстановление после ошибок может быть трудным или невозможным. если вы -- администратор cvs, вы можете захотеть ограничить использование этих команд с помощью файла `taginfo' (see section настройка журналирования).
чтобы удалить метку, задайте ключ командной строки `-d'
команде cvs rtag -d rel-0-4 tc
удаляет метку
когда мы говорим перемещение метки, мы хотим, чтобы
существующее имя указывало на другие ревизии. например, метка
cvs tag -r 1.6 -f stable backend.c
когда мы говорим переименовать метку, мы хотим, чтобы
другое имя указывало на те же ревизии, что и существующее.
например, мы могли ошибиться в написании имени метки и хотим
исправить его, пока остальные не начали его использовать. чтобы
переименовать метку, сначала создайте новую метку, используя
ключ командной строки `-r' команды cvs rtag -r old-name-0-4 rel-0-4 tc cvs rtag -d old-name-0-4 tc пометки при добавлении и удалении файловпометки довольно запутанно взаимодействуют с операциями добавления и удаления файлов; в основном cvs отслеживает, существует файл или нет, не особенно беспокоясь о пустяках. по умолчанию, помечаются только файлы, которые имеют ревизии, соответствующие тому, что помечается. файлы, которые еще не существуют или которые уже были удалены, просто пропускаются при пометке, при этом cvs знает, что отсутствие метки означает, что файл не существует в помеченном месте.
однако, при этом можно потерять небольшое количество информации.
например, предположим, что файл был добавлен, а затем удален.
затем, если для этого файла отсутствует метка, нет способа
сказать, потому ли это, что метка соответствует времени перед
тем, как файл был добавлен, или после того, как он был удален.
если вы выполните
команда липкие меткииногда ревизия, находящаяся в рабочем каталоге, содержит также дополнительную информацию о себе: например, она может находиться на ветке (see section создание ветвей и слияние), или же может быть ограничена с помощью `checkout -d' или `update -d' версиями, созданными ранее указанной даты. так как эта информация долговременно сохраняется, то есть действует на последующие команды над рабочей копией, то мы называем ее липкой. в большинстве случаев липкость -- это запутанный аспект cvs, о котором вам не следует думать. однако, даже если вы не желаете использовать эту возможность, вы все же захотите что-нибудь узнать о липких метках (например, как их избежать!).
можно использовать команду $ cvs status driver.c =================================================================== file: driver.c status: up-to-date version: 1.7.2.1 sat dec 5 19:35:03 1992 rcs version: 1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v sticky tag: rel-1-0-patches (branch: 1.7.2) sticky date: (none) sticky options: (none) липкие метки остаются на ваших рабочих файлах до тех пор, пока вы не удалите их с помощью `cvs update -a'. опция `-a' извлекает версию файла из головной ревизии ствола и забывает обо всех липких метках, датах и ключах командной строки.
самое распространенное использование липких меток -- указать,
над какой ветвью идет работа, что описано в section доступ к веткам. однако, липкие метки также используются и без веток.
предположим, например, что вы хотите избежать обновления вашего
рабочего каталога, чтобы защититься от изменений, которые делают
ваши коллеги. вы, конечно, можете просто не выполнять команду
люди часто хотят извлечь старую версию файла без установки липкой
метки. это можно сделать с помощью ключа командной строки
`-p' команд $ cvs update -p -r 1.1 file1 >file1 =================================================================== checking out file1 rcs: /tmp/cvs-sanity/cvsroot/first-dir/attic/file1,v vers: 1.1 *************** $
однако, это не самый простой способ, если вы спрашиваете, как
отменить последнее фиксирование (в этом примере -- поместить
`file1' обратно в то состояние, в котором он был в ревизии
1.1). в этом случае лучше будет использовать ключ командной
строки `-j' команды go to the first, previous, next, last section, table of contents. |