Почему тег ветки в CVS не продвигается?

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

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

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


person StriplingWarrior    schedule 15.06.2009    source источник
comment
Примечание: вам, вероятно, лучше отказаться от CVS, если это вообще возможно для Git (который имеет очень четкое представление о ветвях) или, по крайней мере, Subversion (который использует дешевую копию для веток; это не лучшая модель, но лучше, чем CVS-модель тегов точки ветвления, т.е. специальные номера ревизий).   -  person Jakub Narębski    schedule 07.07.2009
comment
Дело принято. Для наших новых проектов мы начали использовать SVN, но нам все еще нужно перенести старые. Как подключаемый модуль Eclipse поддерживает Git по сравнению с SVN?   -  person StriplingWarrior    schedule 07.07.2009


Ответы (3)


Идея заключается в том, что в этот момент ветка начала ответвляться.

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

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

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

person David Thornley    schedule 15.06.2009
comment
Я отмечу это как правильный ответ, потому что вы ответили на мой главный вопрос: идея, что в этот момент ветка начала разветвляться. Я прочитал несколько ссылок на CVS, особенно части о тегах и ветвях. Я не смог найти информацию о том, почему этот тег появился в исходной версии, даже после того, как я внес новые изменения в ветку. - person StriplingWarrior; 16.06.2009
comment
CVS начиналась как набор сценариев поверх старой RCS и сохраняла формат файла RCS. RCS не имеет (или, по крайней мере, не имеет) той же концепции ветвления, поэтому теги RCS использовались как обычные теги, так и как маркеры ветвей. Тег RCS 1.12.0.2 является началом ветви 1.12.2, а теги, подобные 1.12.2.3, являются версиями этой ветви. Таких странностей много, и это одна из причин, по которой многие люди перешли на Subversion. - person David Thornley; 16.06.2009

Вероятно, он не перемещается, потому что вы его не используете - судя по вашему описанию, вы по-прежнему фиксируете все изменения в HEAD.

Чтобы использовать ветку, вы сначала должны пометить все файлы тегом ветки (этот пример из руководства 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

person kdgregory    schedule 16.06.2009
comment
Это не совсем соответствует тому, что я вижу. Я должен еще раз упомянуть, что я использую диспетчер CVS Eclipse. Я использую Переключиться на другую ветку или версию, чтобы проверить ветку, и когда я фиксирую, я вижу, что номер версии изменился в формате, аналогичном тому, что показывает Йоаким. Однако в Eclipse я все еще вижу тег ветки, прикрепленный к исходной версии. - person StriplingWarrior; 16.06.2009
comment
StriplingWarrior: не привязывайтесь так к графическому представлению ветки. тот факт, что тег прикреплен к базовой ревизии, не меняет того факта, что если вы фактически выписываете с помощью тега ветки, вы получите верхнюю ревизию этой ветки, а не ревизию, которую график связывает непосредственно с тегом ветки. - person Oliver Giesen; 17.06.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 - ‹branchrevision›. ‹Filerevison› [. ‹Branchrevision›. ‹Filerevison›. ] [. ‹Branchrevision›. ‹Filerevison›] ... и так далее. Первая ветвь ревизии всегда равна 1 (afaik).

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

person Joakim Elofsson    schedule 15.06.2009
comment
Ваше описание того, как формируются номера ревизий, не совсем корректно. Единственный способ получить нечетный номер ветки - использовать команду «Импорт». Если вы создаете ветвь самостоятельно, то номер ветки всегда будет четным числом, которое будет равно наивысшему номеру ветки, существующему в файле в том же каталоге. - person Oliver Giesen; 16.06.2009
comment
... или 2, если это первая ветка, созданная в этом каталоге. - person Oliver Giesen; 16.06.2009