Как сделать номера версий? - PullRequest
155 голосов
/ 05 марта 2009

Моя компания строит продукт. Это будет версия от SVN. Это веб-приложение, поэтому, по сути, никогда не будет версии, которая не имеет каких-либо функций и поэтому всегда может быть помечена как бета-версия. Но так как это будет корпоративный продукт, я действительно не хочу, чтобы там были "нестабильные наблюдатели". Так как бы вы занялись версионированием? 1.0 стабильна? Дата сборки должна быть в номере версии? Скажите, что вы, ребята, думаете!

Ответы [ 18 ]

248 голосов
/ 05 марта 2009

[ крупный ]. [ незначительные ]. [ выпуск ]. [ построить ]

Major : действительно маркетинговое решение. Вы готовы назвать версию 1.0? Считает ли компания это основной версией, за которую клиентам, возможно, придется платить больше, или это обновление текущей основной версии, которое может быть бесплатным? Меньше решений по НИОКР и больше решений по продукту.

второстепенный : Начинается с 0 всякий раз, когда Major увеличивается. +1 за каждую опубликованную версию.

release : Каждый раз, когда вы достигаете этапа разработки и выпускаете продукт, даже внутри (например, для QA), увеличивайте его. Это особенно важно для общения между командами в организации. Излишне говорить, что никогда не выпускайте один и тот же «релиз» дважды (даже внутри страны). Сброс до 0 на минор ++ или мажор ++.

build : Может быть ревизия SVN, я считаю, что работает лучше всего.

64 голосов
/ 05 марта 2009

x.y.z.g

приращения в g нестабильны. (или RC) приращение z стабильно и означает исправление ошибок.
приращения y стабильны и означают новые функции.
приращения x стабильны, основной выпуск без обратной совместимости на 100%.

33 голосов
/ 05 марта 2009

Однажды я написал подробное «Руководство по стилю управления версиями» для большого моего проекта. Проект не был реализован, но руководство по стилю все еще доступно онлайн . Это мое личное мнение, возможно, оно полезно (или вдохновляет) для вас.

Осторожно, это длинный текст, посвященный управлению версиями компонентов по сравнению с версиями продуктов и тому подобному. Он также выражает твердое мнение о некоторых схемах управления версиями, популярных в сообществе OSS, но у меня они есть, поэтому я выражаю их. ; -)

Я не согласен с использованием, например, номера редакции Subversion. Возможно, вы захотите сохранить выпущенную версию, продолжая разработку в TRUNK, поэтому вы создадите ветку обслуживания - и версия вашего номера редакции пойдет на спад.

Редактировать: В качестве резюме, он различает версионные исходные файлы, компоненты и общий продукт. Он использует систему отдельного x.y-версинга для компонентов и продукта, с хорошей взаимозависимостью между этими двумя компонентами, что делает отслеживание, какая версия компонента принадлежит какой версии продукта. В нем также говорится о том, как обрабатывать циклы альфа / бета / релиз / патч, не нарушая систему. На самом деле, это способ работы для всего цикла разработки, так что вы можете выбрать вишню. ; -)

Редактировать 2: Поскольку достаточное количество людей сочло мою статью полезной, чтобы сделать ее "Хорошим ответом", я снова начал работать над этой статьей. Доступны версии PDF и LaTeX, полное переписывание, включая улучшенный язык и пояснительную графику, последует, как только я найду время. Спасибо за ваши голоса!

29 голосов
/ 05 марта 2009

Получите вдохновение из Википедии: "Управление версиями программного обеспечения"

Еще один «новый» и «относительно популярный» вариант - Семантическое управление версиями

Резюме:

Учитывая номер версии MAJOR.MINOR.PATCH, увеличить:

  1. ОСНОВНАЯ версия при несовместимых изменениях API,
  2. ОСНОВНАЯ версия, когда вы добавляете функциональность обратно-совместимым способом, и
  3. Версия PATCH, когда вы делаете обратно совместимые исправления ошибок.

Дополнительные метки для предварительной версии и метаданных сборки доступны как расширения в формате MAJOR.MINOR.PATCH.

9 голосов
/ 18 декабря 2014

a.b.c.d

Увеличение: когда
- d : исправление ошибок
- c : техническое обслуживание, например, улучшение производительности
- b : новые функции
- a : изменение архитектуры

Обязательным является самый левый, например, например, если есть новая функция и исправлена ​​ошибка, вам нужно только увеличить b .

8 голосов
/ 18 июля 2014

Основываясь на своем опыте со сложным управлением зависимостями на уровне корпоративной платформы и версиями версий, я рекомендовал подход, который мне нравится называть Полусемантическое управление версиями .

В основном он основан на Semantic Versioning 2.0 , но не настолько строг.

Сегменты полусемантической версии:

<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]

Основной формат сегмента выпуска:

MARKETTING.MAJOR.MINOR.PATCH

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

Как и SemVer, я рекомендую Major, Minor и Patch компоненты для представления уровней обратной совместимости, но я также рекомендую добавлять Маркетинговый компонент . Это позволяет владельцам продуктов, тематическим эпосам / группам и бизнес-задачам затрагивать основной компонент независимо от проблем технической совместимости.

В отличие от других ответов, я не рекомендовал добавлять номер сборки в основной сегмент. Вместо этого добавьте Сегмент после релиза после '+' (например: 1.1.0.0 + build.42). SemVer вызывает эти метаданные сборки, но я думаю, что сегмент Post-Release более ясен. Этот сегмент отлично подходит для объявления данных суффикса как не связанных с информацией о совместимости в первичном Release Segment . Затем вашим сборкам с непрерывной интеграцией может быть присвоен предыдущий номер выпуска с добавлением добавочного номера сборки, который сбрасывается после каждого основного выпуска (например: 1.1.0.0 -> 1.1.0.0 + build.1 -> 1.1.0.0 + build.2 -> 1.1.0.1). Некоторым людям поочередно нравится указывать здесь номер ревизии svn или git commit sha, чтобы упростить привязку к репозиторию кода. Другим вариантом является использование сегмента пост-релиза для исправлений и исправлений, хотя, возможно, стоит подумать о добавлении для этого нового основного компонента выпуска. Он всегда может быть отброшен при увеличении компонента исправления, поскольку версии эффективно выровнены по левому краю и отсортированы.

Помимо сегментов выпуска и пост-релиза, люди часто хотят использовать сегмент предварительного релиза для обозначения почти стабильных предварительных выпусков, таких как альфа, бета-версии и кандидаты на релиз. Подход SemVer к этому хорошо работает, но я рекомендую отделить числовые компоненты от буквенно-числовых классификаторов (например: 1.2.0.0 + alpha.2 или 1.2.0.0 + RC.2). Обычно вы производите удар по сегменту релиза одновременно с добавлением сегмента после релиза, а затем отбрасываете сегмент до релиза при следующем увеличении сегмента основного релиза (например: 1.0.1.2 -> 1.2.0.0-RC.1 - > 1.2.0.0). Предварительно выпущенные сегменты добавляются, чтобы указать, что готовится к выпуску версия, обычно это просто фиксированный набор функций для более глубокого тестирования и совместного использования, который не меняется от минуты к минуте при большем количестве коммитов.

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

Если вам интересно, я написал полусемантический парсер в ruby ​​. Мне нужно было не просто использовать этот шаблон, но и иметь возможность управлять другими приложениями, которые его использовали.

3 голосов
/ 05 марта 2009

«Номера версий» относятся к вашей внутренней системе контроля версий. Номера релизов - это другое дело (и они должны быть другими). ​​

Придерживайтесь простой системы релизов MAJOR.MINOR (например, v1.27), где MAJOR - это уровень совместимости (версия 2.x несовместима или, по крайней мере, существенно отличается от версии 1.x), а MINOR - ваши исправления ошибок. или незначительные улучшения. Если вы придерживаетесь формата X.Y, вы также можете использовать другие системы, такие как YEAR.MONTH (2009.12) или YEAR.RELEASE (2009.3). Но на самом деле вам, вероятно, лучше всего придерживаться MAJOR.MINOR, если у вас нет веских причин не делать этого.

Определенно не используйте ничего, что не соответствует формату XY, поскольку это затруднит работу дистрибутивов, сайтов объявлений и т. Д., И это само по себе может серьезно повлиять на популярность вашего проекта.

Используйте ветки и теги в вашей (предпочтительно распределенной) системе контроля версий, чтобы пометить конкретные внутренние номера версий как относящиеся к MAJORS и MINORS соответственно.

И да, 1.0 должен быть стабильным. Все релизы должны быть стабильными, если они не отмечены альфа, бета или RC. Используйте Альфы для известных-сломанных-и неполных. Бета-версии для известных-нарушенных. RC для "попробуйте; вы, вероятно, заметите вещи, которые мы пропустили". Все, что не имеет ни одного из них, должно (в идеале, конечно) быть проверено, хорошо известно, иметь современное руководство и т. Д.

2 голосов
/ 05 марта 2009

Если это в SVN, то почему бы не использовать номер редакции SVN?

Если вы посмотрите в правом нижнем углу этой веб-страницы, вы увидите номер версии переполнения стека, который является номером версии SVN.

2 голосов
/ 05 июля 2013

Вариант схемы: [Major]. [Несовершеннолетний]. [Devrel] [mark]
[Major]: увеличение, если у вас есть радикальные изменения в развитии.
[minor]: увеличение, если у вас есть небольшие изменения в разработке.
[devrel]: увеличить, если у вас есть исправление ошибки. Сброс на ноль, если мажорный ++ или минорный ++.
[mark]: a, b или rc: a - альфа-релиз, b - бета-версия, а rc - кандидат на релиз. Обратите внимание, что версии, такие как 1.3.57a или 1.3.57b или 1.3.57rc, предшествуют версии 1.3.57. Начните с 0.0.0.

2 голосов
/ 05 марта 2009

В наши дни довольно популярно использовать номер ревизии Subversion.

...