Откуда берется номер версии?
У меня есть система контроля версий (например, Subversion), и теперь я хотел бы настроить процесс сборки. Теперь мне нужно создать номер версии и вставить его в систему. Но откуда берется номер версии? Предположим, я хочу использовать эту общую схему
Я мог предположить, что основной и вспомогательный номер версии должны быть где-то введены вручную. Номер ревизии может быть увеличен автоматически. Но все же я не знаю, где бы я разместил старший и младший номер.
В моем случае у меня есть несколько файлов php, которые я хотел бы сжать, но прежде чем мне нужно будет вставить некоторые номера версий в файл php.
Я отредактировал этот пост, чтобы попытаться сделать мой запрос более понятным:
Я не использую Subversion, это был просто пример. И я не хочу обсуждать схему номеров версий.
Представьте, что я хочу создать версию 3.5.0 или 3.5.1. Я передам этот номер версии в скрипт сборки? Будет ли сценарий создавать ветку в хранилище с этим номером или он ожидает, что кто-то уже создал эту ветку? Вручную? Или сценарий сборки будет искать имя ветви (например, '3.5.1) и использовать его для дальнейших действий? И номер версии приходит из моего мозга, или он создается автоматически (я полагаю, что основной / младший номер исходит из моего маленького мозга, и создается номер ревизии)? Или вы поместите номер в файл, который может быть вставлен в хранилище?
Я думаю, если бы я использовал инструмент управления релизами, я бы вставил туда номер версии. Но я еще не пользуюсь.
5 ответов
Для subversion либо возьмите глобальный номер ревизии и используйте его в качестве номера "сборки", либо, что еще лучше, вообще не полагайтесь на него и управляйте версиями с помощью тегов и / или ветвей. Основная проблема с глобальной ревизией заключается именно в том, что она является глобальной для репо. Это увеличится, даже если некоторые части репо не изменятся.
Полностью отсоединить версии от ревизий репо ИМХО лучше. У вас есть теги, используйте их.
Согласен со всеми предыдущими по использованию веток и меток. Кроме того, имена веток и имена тегов могут быть включены в процесс сборки с некоторыми умными сценариями.
Единственный лакомый кусочек, который я хотел бы добавить, это то, что вы должны вставлять свою версию SVN в каждую сборку. Иногда легко вернуться к определенной точке с ревизией, вместо того, чтобы знать тег или ветку. На 99% тег / ветка достаточно хороши, но ревизия отлично подходит для инкрементных / внутренних / непрерывных / тестовых сборок.
Все ветки должны быть созданы вручную. Скрипт сборки должен работать с тегом и / или веткой, начиная с проверки его (или может обновлять). Как часть процесса сборки, хорошей идеей является создание тега для точного снимка, который будет создан.
Обычно у вас есть номер сборки и версия. Номер сборки может быть увеличен автоматически и включен в систему контроля версий как часть сборки (за исключением сборки на основе тегов, где номер сборки должен оставаться вне хранилища - еще одна причина избегать сборок на основе тегов).
Версия обычно хранится в файле, который вы обновляете вручную один раз за цикл выпуска. Это проверено в правой ветви и затем оставлено в покое. Например, основная строка будет иметь версию = "3" в своем файле, первая ревизия в ветке релиза будет иметь версию = "3.5", и если потребуется выпуск патча, вы ветвите эту ветку в своей версии релиза и отметьте версию = "3.5.1"
Редакция в SVN или любой другой системе управления версиями - это не то же самое, что номер вашего продукта (или даже номер вашей сборки).
Существует множество способов применения номера версии. Обычно в Subversion вы можете создать ветку (или тег, они по сути одно и то же) для сборки, и если это версия выпуска, вы создаете тег для этого, например, svn://my-repo/releases/1.0.0
Вы можете либо передать параметр в ваш скрипт сборки, чтобы получить код и использовать его в качестве номера сборки, либо иметь каталог, который использовал ваш скрипт сборки, и svn переключить его на ветку, которую вы хотите построить, скрипт может использовать svn информация, чтобы определить, какую версию он собирал.
x.y.i.j
куда x
- Основная версия, y
- Малая версия, i
- Номер сборки, j
- Номер ревизии
Major version
увеличение основных изменений (новая архитектура, новый пользовательский интерфейс и т. д.)
Minor version
увеличение незначительных изменений (улучшение производительности, исправление основных ошибок и т. д.),
Build number
увеличивается каждый раз, когда вы делаете публичный релиз.
Revision number
увеличивается каждый раз, когда вы фиксируете изменения в исходном дереве проекта.
Я предпочитаю указывать 0 в качестве номера редакции в AssemblyInfo.cs и указывать действительное число в названии пакета релиза (foo-1.1.7.110-source.zip)