Все, что вам нужно сделать, это скопировать эту ветку в тег. Subversion не только пометит все, но в отличие от CVS, она будет хранить историю вашего переименования.
Однако я бы порекомендовал несколько вещей ...
Упростите названия веток и тегов. В CVS ветви и теги совместно используют одно и то же пространство имен. В Subversion они этого не делают. Вам не нужны префиксы R
и B
.
Избавиться от подчеркивания. Вы можете использовать точки в Subversion. Например, ваш выпуск теперь может быть Release-1.0 вместо Release_1_0. Черт, я бы даже не стал возиться с частью Release
. Просто назовите тег 1.0
и ветку 1.0
.
Теперь самое главное: не используйте теги повторно! Нет нет нет. Это то, что в сообществе CM называется anti-pattern . анти-паттерн - плохая практика CM.
Перемещение тега в Subversion не так плохо, как в CVS, поскольку Subversion, в отличие от CVS, хранит историю ваших тегов и изменений. Тем не менее, тег должен быть снимком в определенный момент времени. То есть, когда я говорю о Выпуске 1.0, мне не нужно говорить «Вы имеете в виду Выпуск 1.0, который мы сделали на прошлой неделе или на предыдущей неделе» .
Я понимаю, что вы делаете, но есть лучшие способы. Прежде всего, тегирование в Subversion очень и очень быстрое. Вы делаете svn cp...
и все готово. В CVS это может занять от 40 до 50 минут (что, вероятно, является причиной того, что вы начали бизнес по повторному использованию тегов).
Я рекомендую вам просто добавить что-нибудь в конец тега. Например, вы можете поместить что-то вроде: 1.0-2012-Feb-29, так что вы знаете, что говорите о Выпуске 1.0, который состоялся 29 февраля 2012 года. Вы все еще знаете, что это Выпуск 1.0, потому что он все еще начинается с 1.0, но Вы знаете , о котором Release 1.0 вы говорите.
Большой вопрос: почему вы маркируете эти релизы? В Subversion многие люди просто используют идентификатор редакции Subversion в качестве быстрого тега. Вы можете говорить о Revision 20321 вашего программного обеспечения. Тогда вы помечаете теги только тогда, когда действительно делаете настоящий релиз.
Мы используем Jenkins в качестве нашей системы сборки, поэтому для каждой фиксации существует отдельная сборка. QA берет наши сборки прямо из Jenkins для тестирования. Наши разработчики просто говорят, возьмите Build # 29 из Release 1.0 (Release 1.0 - просто ссылка на ветку). Позже QA скажет, что они сертифицировали конкретную сборку для выпуска, и мы вернемся к Jenkins и отметим эту сборку как Release-1.0 или любую другую.
На моем последнем месте мы отметили каждую сборку как Release-1.0-B-xxx, где "xxx" - номер сборки Jenkins. Мы поместили эти теги сборки в /project/tags/BUILDS/
в нашем репозитории Subversion, чтобы они не отображались, когда вы захотите сделать svn ls /project/tags
, чтобы увидеть, что это за релизы. Затем, когда у нас действительно был релиз, мы скопировали тег сборки в фактический тег релиза:
$ svn cp http://build/src/foo/tags/BUILDS/1.0-B-233 http://build/src/foo/tags/1.0
Надеюсь, это поможет. Subversion заботится о многих проблемах, которые у вас были с CVS. Пометка выполняется мгновенно, каждое изменение в репозитории имеет номер ревизии по всему репозиторию, и вы можете просто использовать его в качестве тега сборки. Кроме того, даже когда вы перемещаете тег, Subversion отслеживает изменение, когда оно было сделано и кто его сделал. Вы могли бы даже спросить разницу между новым и старым тегом.
Однако теги должны быть неизменяемыми. У меня даже есть ловушка предварительной фиксации, которая позволяет вам создавать теги, но не изменять их после их установки.