Почему тег ветви в CVS не продвигается? - PullRequest
0 голосов
/ 16 июня 2009

Наша компания недавно начала создавать ветки CVS, чтобы отмечать каждый релиз. Раньше мы использовали теги, и если в течение периода тестирования мы исправляли что-то, что требовалось выпустить в релиз, мы просто перемещали тег вперед. Это работает хорошо, пока в один и тот же файл не внесены два изменения: одно должно быть выпущено, а другое - нет. Теперь нам нужно применить одно и то же изменение и к заголовку, и к ветке релиза.

Я использую плагин Eclipse CVS для взаимодействия с CVS. Когда я просматриваю историю файла, я вижу тег i20090529Release в разделе «Теги» (в данном случае это ревизия 1.30 файла), а когда я «Показать средство просмотра тегов» в представлении «История», значок указывает, что это ветвь. тег, в отличие от тега версии. Когда я смотрю на ревизии, которые были зафиксированы с тех пор, как произошла ветвь, я вижу, что следующая ревизия, внесенная в заголовок, становится версией 1.31, а следующая ревизия, внесенная в ветку, становится версией 1.30.2.1. У меня вопрос, почему тег i20090529Release остается с версией 1.30 файла, которая не является самой последней версией в ветви i20090529? Это действительно добросовестный «тег», или это скорее концептуальная идея, что ветвь начала разветвляться в этот момент? Я заметил, что не могу применить этот тег к любой другой ревизии файла. Почему он вообще отображается в столбце «Теги»?

Заранее благодарим за любые разъяснения, которые вы можете предоставить.

Ответы [ 3 ]

2 голосов
/ 16 июня 2009

Это идея, что ветвь начала разветвляться в этот момент.

Ветвь - это набор версий, которые в какой-то момент разветвляются от главной магистрали и поддерживают свою собственную независимую разработку (которая, конечно, может быть тесно скоординирована). Это не набор изменений, которые будут автоматически применены к более поздним версиям.

Это не тег в обычном смысле: если вы извлекаете данные в соответствии с тегом, вы получите снимок дерева исходного кода на момент создания тега, а результаты проверки в соответствии с веткой меняются со временем, так как в ветку вносятся изменения. Он похож на тег и работает примерно так же; CVS использует старый формат файлов RCS и использует теги RCS как для веток, так и для тегов CVS.

Есть несколько хороших ссылок для CVS. Читайте о тегах и ветвях.

1 голос
/ 16 июня 2009

Вероятно, он не перемещается, потому что вы его не используете - основываясь на вашем описании, вы все еще делаете все изменения в ГОЛОВУ.

Чтобы использовать ветку, сначала нужно пометить все файлы тегом ветки (этот пример из руководства по CVS):

cvs tag -b rel-1-0-patches

В то же время я настоятельно рекомендую тег снимка, который вы никогда не перемещаете и не обновляете, чтобы вы всегда могли перестроить код в этот момент времени:

cvs tag rel-1-0

Чтобы использовать ветку, вы должны проверить ветку в вашем рабочем каталоге:

cvs co -r rel-1-0-patches example

Затем, когда вы фиксируете изменения для ветви, вы увидите тег ветви, примененный к изменению. То, что вы не увидите, это какие-либо изменения в HEAD. Для этого вам нужно объединить изменения ветки в HEAD, и это слишком сложно, чтобы вставить SO-ответ, поэтому перейдите к документации: http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs_5.html#SEC54

0 голосов
/ 16 июня 2009

Обычные теги настроены на конкретную версию файла и никогда не будут перемещаться. Если выбран вариант 1.30, он будет показывать 1.30, пока не будет изменен вручную.

Теги ветвления привязываются к ревизии ветвления, если ветвится файл с ревизией 1.30, первая ветвь будет 1.30.2 (или следующая свободная четная цифра). Первый файл, переданный в эту ветку, получит 1.30.2.1, следующий коммит 1.30.2.2 и т. Д. (Подробности см. В комментарии Оливера Гизена)

Извлечение этого файла из этой (1.30.2) ветви всегда будет извлекать последнюю версию файла в этой ветви (1.30.2.x).

Можно также делать ветки в ветвях .. тогда ревизии заканчиваются как 1.30.2.2.2 (первая ветка ревизии файла 1.30.2.2) Редакции в cvs: . [. . ] [. . ] ... и так далее. Первый ответвление всегда 1 (афаик).

edit: исправлена ​​ошибка четного числа, указанная Оливером Гизеном

...