Мы с коллегами спорим о ценности и использовании тегов в системах Release / SCM. Мы надеемся, что сообщество StackOverflow поделится своими мыслями и поможет нам решить эту проблему.
Одна сторона утверждает, что теги - ценное дополнение к управлению выпусками. Пример их использования: мы делаем выпуск Maven, который создает новый тег (назовем его 1.0), который представляет собой снимок кода, используемый для этого выпуска. Этот тег должен быть веткой ТОЛЬКО ДЛЯ ЧТЕНИЯ. Когда необходимо исправить ошибку, мы можем скопировать тег в новую ветку (назовите ее 1.1). Исправления ошибок идут туда. Эти исправления могут быть объединены обратно в Trunk, чтобы основная ветвь разработчика получила исправления ошибок. Наконец, выпускается версия 1.1, и автоматически создается тег 1.1. Этот цикл продолжается. Основное преимущество тега в том, что если вам когда-либо понадобится перевыпустить версию 1.0 по какой-либо причине, вы можете просто выпустить тег 1.0 с уверенностью, что он никогда никем не изменялся. Кроме того, сказать «Release Tag 1.0» чище, чем сказать «Release revision 1 of branch 1.0, которая является исходной версией 1.0 без исправлений».
Другая сторона утверждает, что теги не дают никаких ценных преимуществ, особенно в такой системе, как Subversion с глобальными версиями, которые действуют как теги в CVS. Кроме того, Subversion выдает предупреждение только при фиксации тега; на самом деле это не останавливает. Их метод разрабатывается в Trunk, и после выпуска вы создадите Branch под названием 1.0. Вы продолжите исправлять ошибки в Trunk, и если вам нужно перевыпустить эти исправления ошибок в производственную среду, вы должны объединить их в ветку 1.0 и повторно выпустить 1.0. В какой-то момент, возможно, после серьезных исправлений или функций в Trunk, вы выпустите и сделаете Branch 1.1. Цикл продолжается. Если вам когда-нибудь понадобится выпустить исходную версию 1.0, вам нужно будет проверить Branch 1.0 revision 1.
Очевидно, работают оба метода. Я хотел бы услышать мнение сообщества о том, какой метод предпочтительнее и почему.
Изменить: меня немного беспокоит, что «лучший» способ зависит от базовой системы SCM. Либо выберите Subversion для получения ответов, либо, если возможно, оставьте его агностиком SCM.