2009-03-05 2 views
144

Моя компания строит продукт. Это будет версия SVN. Это webapp, поэтому в принципе никогда не будет версии, которая не имеет в ней некоторых функций и поэтому всегда может быть помечена как бета-версия. Но поскольку это будет корпоративный продукт, я действительно не хочу «неустойчивого контроля» там. Итак, как бы вы относились к управлению версиями? Является ли 1.0 стабильным? Должна ли дата сборки быть в номере версии? Расскажите, что вы, ребята, думаете!Как сделать номера версий?

+8

Через некоторое время, когда вы дойдете до ~ 6 или 7 вы должны переключиться на 2010 (или любой другой хороший год);) – Anonymous

+8

Arg ... Пожалуйста, я прошу вас, не. :-D – DevSolar

+0

http://msdn.microsoft.com/en-us/library/system.version.aspx в замечаниях – Kikaimaru

ответ

234

[основным] [незначительные] [релиз] [сборки]

основных:. Действительно маркетинговое решение. Готовы ли вы назвать версию 1.0? Рассматривает ли компания эту крупную версию, для которой клиентам, возможно, придется платить больше, или это обновление текущей основной версии, которая может быть бесплатной? Меньше решения R & D и более решение продукта.

minor: Начат с 0 когда майор увеличивается. +1 для каждой версии, которая публикуется.

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

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

+6

Это почти соответствует моему определению версии моего программного обеспечения. Однако я сбрасываю выпуск на 0, как только увеличиваю номер версии «minor». – BlaM

+0

Я делаю также. Наверное, я этого не делал. Я отредактирую. –

+3

Что делать, если вы используете git? –

2

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

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

+0

См. Мой ответ - номер версии SVN прерывается после настройки ветви обслуживания. – DevSolar

3

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

+0

См. Мой ответ - номер версии SVN прерывается после настройки ветви обслуживания. – DevSolar

+2

Использование версии SVN как ЧАСТИ вашего номера версии очень распространено/популярно.Использование только номера версии SVN имеет множество проблем, например, что указывает DevSolar. – rmeador

-2

Или использовать 'мысль' номер версии числа запятой подрывной .. ZB:

1.0.101 // редакция 101, выпуск

или 1.0.101-090303 // с датой выпуска, я использовать этот

62

xyzg

приращения

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

+1

это ваш путь или обычное использование? – Canavar

+24

О пятне G Я не уверен, остальное распространено. –

+1

Хорошая схема управления версиями компонентов. Но для коммерческого продукта все, кроме x.y, просто запутывает клиента и затрудняет общение с IMHO. Особенно веб-приложения, которые требуют, чтобы клиент мигрировал - «рано выпускать, выпускать часто» не режет его ... – DevSolar

25

Получить себе вдохновение из Википедии: "Software versioning"

Другой "новый" и "относительно популярный" вариант Semantic Versioning

Резюме:

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

  1. MAJOR, когда вы делаете несовместимые изменения API,
  2. Версия MINOR, когда вы добавляете функциональные возможности в обратную совместимость, и
  3. Версия PATCH при исправлении ошибок, совместимых с обратной связью.

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

+2

@ Ravi - может быть, но это может быть аннулировано. SO требует, чтобы репутация редактировалась. Резюме, по крайней мере, было бы лучше для людей, сбрасывающих этот вопрос. –

+0

@Nathan, если вы используете SO, вы наверняка сможете использовать историю изменений в статье Википедии. – CMircea

+10

@iconiK - Если вы используете SO, вы, несомненно, понимаете, что «Вот ясный, краткий ответ на той же странице с другими ответами» более полезно, чем «вот ссылка на другой сайт, где вы можете прорыть старые версии статьи и, может быть, найти что-то важное ». –

2

Управление версиями зависит от вас; Я бы поставил 1.0 на первую версию, в которой я был уверен. Вы можете быстро следить за ней в других версиях, поскольку некоторые производители программного обеспечения дали 1.0 плохую репутацию.

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

33

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

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

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

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

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

+1

Как сказал GmonC, это старый поток, но я нашел его, прочитал связанный документ и хотел сказать хорошо. Некоторые превосходные мысли, провоцирующие предметы там. Благодаря! +1 –

+1

Прочитав некоторые ваши комментарии к другим ответам, я надеялся, что вы отправили ответ. И меня не подвело. Хорошая статья. – jontyc

+1

URL-адрес изменился: http://dev.rootdirectory.de/wiki/VersioningStyleGuide – Sonny

2

Хотя просто пересмотр номера версии Subversion хорош и прост, он удаляет информацию из номера версии. Пользователи могут считать это плохой.

Я предполагаю, что ваш webapp будет иметь какую-то процедуру развертывания, чтобы не публиковать каждую ревизию в Subversion. Поскольку из «внешнего» (с точки зрения пользователя) невозможно определить, когда будут производиться релизы, и сколько изменений код будет проходить между ними, это делает цифры почти случайными. Они будут увеличиваться, и я думаю, можно догадаться вид расстояния от сравнения двух ревизий, но не так много.

Номера классической версии имеют тенденцию «драматизировать» релизы, чтобы пользователи могли строить какое-то ожидание. Легче подумать: «У меня есть версия 1.0, теперь версия 1.1 не добавляет этого и того, что звучит интересно», чем думать «вчера мы запустили SO revision 2587, сегодня это 3233, это должно быть намного лучше!».

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

0

У меня очень мало опыта в этом районе. Тем не менее, вот что я сделал бы:

  1. Выберите схему нумерации версий и придерживайтесь ее. Быть последовательным.
  2. Любое изменение версии должно представлять значительное изменение. Насколько малы изменения, и уровни изменений, которые отражены в номере версии, зависят от вас.

Конечно, вы можете просто использовать номер версии svn --- как и многие другие!

Надеюсь, это поможет...

3

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

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

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

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

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

+1

Я согласен с тем, что пользователь видит и что вы строите, это две разные вещи, но не нужно ли их связывать так или иначе? то есть номера выпуска и номера версий должны быть связаны, и вы должны иметь возможность узнать номер версии с номером выпуска –

+0

С открытым исходным кодом нам не нужны номера сборки. Мы распространяем исходный код, а сборки - на дистрибутивы. Если они видят ошибку в своей версии, но не в исходной версии, то они сделали что-то неправильно в сборке. В противном случае это код для этого тега release. Теги также видны в VC. –

1

Мы потратили слишком много времени на решение, чтобы увеличить основную версию. Некоторые магазины редко делали это, поэтому у вас были бы релизы, такие как 1.25.3, а другие могли бы сделать это навсегда, давая вам 15,0

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

Year.Release.строить

  • года = текущий год
  • релиза = последовательность # публичных релизы с новой функциональности - сброс 1 каждый года
  • сборки = инкрементируется для ошибки исправления и внутренние релизы

EDIT

** Теперь это было для внутреннего приложения, которое постоянно увеличивалось **

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

+2

... который делает первый выпуск нового года «основным выпуском» автоматически, независимо от того, насколько значительны изменения. * И * вы не можете сделать «основной» выпуск * в течение года, либо ... – DevSolar

+0

Правда - но это было внутреннее приложение ... –

0

Причина, по которой этот вопрос существует, заключается в том, что у нас нет единого согласованного способа управления конфигурацией.

Способ, которым я хотел бы использовать номер версии, - это просто увеличить число целых чисел от 1. Мне не нужен номер версии нескольких частей, который мне придется объяснять или документировать. И я не хочу использовать номер SVN rev, так как это потребует объяснения.

Вам потребуется несколько сценариев релиз на вершине SVN, чтобы это произошло

0

Мы используем простой major.minor.julian_date синтаксис.

Куда;

  • майор - первый выпуск 1, а затем, когда мы вводим новые новые функции или изменения, настолько значимые, что они не поддерживают обратную совместимость, увеличьте это число.
  • minor - Основные выпуски веха. Для каждой сборки, создаваемой производством, это число увеличивается.
  • julian_date - Julian Day сборка была перенесена в QA.

Пример первого выпуска толкнул QA на 1/15 это -> 1.0.015
Пример первого выпуска толкнул производства на 3/4 -> 1.1.063

Это не идеально, но удобно, поскольку мы нажимаем сборки на QA почти ежедневно.

0

Некоторые хорошая информация здесь:

When to Change File/Assembly Versions

Прежде всего, версии файлов и сборочные версии не должны совпадать друг с другом. Я рекомендую, чтобы версии файлов изменялись с каждой сборкой. Но не изменяйте версии сборки с каждой сборкой, чтобы вы могли отличить две версии одного и того же файла; используйте для этого версию файла. Решение о том, когда менять версии сборки, требует некоторого обсуждения типов сборок, которые необходимо учитывать: отгрузки и доставки.

Non-Shipping Builds В целом, я рекомендую хранить версии, не связанные с отправкой, одинаковыми между судоходными сборками. Это позволяет избежать проблем с загрузкой сборок, вызванных ошибками, из-за несоответствий версии. Некоторые люди предпочитают использовать политику издателя для перенаправления новых версий сборки для каждой сборки. Тем не менее, я рекомендую против этого для сборки без доставки: он не избегает всех проблем с загрузкой.Например, если партнер x-копирует ваше приложение, они могут не знать, устанавливать политику издателя. Тогда ваше приложение будет разбито для них, хотя оно отлично работает на вашей машине.

Но если есть случаи, когда разные приложения на одном компьютере должны связываться с различными версиями вашей сборки, я рекомендую предоставить эти сборки различным версиям сборки, чтобы можно было использовать правильный вариант для каждого приложения без использования LoadFrom/др.

Отгрузка строит Что касается того, стоит ли менять эту версию для сборки, она зависит от того, как вы хотите, чтобы привязка работала для конечных пользователей. Вы хотите, чтобы эти сборки были бок о бок или на месте? Много ли изменений между двумя сборками? Они собираются сломать некоторых клиентов? Вам небезразлично, что это нарушает их (или вы хотите заставить пользователей использовать важные обновления)? Если да, вам следует рассмотреть возможность увеличения версии сборки. Но, опять же, подумайте, что делать это слишком много раз может помешать диск пользователя устаревшими сборками.

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

2

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

7

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

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

Semi-семантическая версия Сегменты:

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

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

MARKETTING.MAJOR.MINOR.PATCH

Каждый сегмент должен позволить алфавитно-цифровым, но чистые ЦИФРЫ рекомендуется для логических инкрементных изменений.

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

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

В дополнение к выпуску и после освобождения сегментов, люди часто хотят использовать сегмент в Pre-Release, чтобы указать почти стабильные предварительные релизы, как альфы, беты и освободить кандидатов. Подход 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 для сложных приложений с множеством небольших независимых версий компонентов (например, микросервисов), каждый из которых имеет свои собственные управляемые зависимости.

Если вы заинтересованы, я написал a semi-semantic parser in ruby. Мне нужно было не просто использовать этот шаблон, но и управлять другими приложениями, которые его использовали.

7

a.b.c.d

приращений: когда
- г: исправляет ошибку
- гр: техническое обслуживание, например, Повышение производительности
- б: новые возможности
- : изменение архитектуры

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

+0

Какие примеры архитектурных изменений? – eaglei22

+1

Например, прогрессивная миграция на микросервисы или переход на другую платформу, которая предполагает значительные изменения по базовому коду, –

+1

Благодарим за отзыв. – eaglei22

Смежные вопросы