Як робити номери версій?


162

Моя компанія будує продукт. Це буде сприйнято SVN. Це webapp, так що в основному ніколи не буде версії, яка не має в них деяких особливостей, і тому завжди може бути позначена як бета-версія. Але оскільки це буде корпоративним продуктом, я дуже не хочу "нестабільного спостереження" там. То як би ви пішли про версію? 1,0 стабільний? Чи повинна дата складання містити номер версії? Скажи мені, що ти думаєш!


8
Через деякий час, коли ви досягнете ~ 6 або 7, вам слід перейти до 2010 року (або будь-якого приємного року);)
Анонімний

8
Арг ... Прошу, прошу, не варто. :-D
DevSolar


3
Продовжуючи дату протягом декількох років, поверніться до цифр, але включайте модні слова, такі як HD , FullHD , 4K , без глютену , що б там не було круто зараз. Тож люди, що не входять до індустрії програмного забезпечення, можуть мати відношення.
Еміль Бержерон

Не забудьте НІКОЛИ не включати нові функції у наступні версії. Завжди є ринок DLC. О, і зробити версію виключно для жінок з червоною шкірою, і для жінок, які мають ліву руку, яка має трохи більше помаранчевої шкіри
clockw0rk

Відповіді:


258

[ мажор ]. [ мінор ]. [ випуск ]. [ збірка ]

основні : Дійсно маркетингове рішення. Ви готові зателефонувати у версію 1.0? Чи вважає компанія це основною версією, за яку клієнтам, можливо, доведеться заплатити більше, чи це оновлення поточної основної версії, яка може бути безкоштовною? Менше рішення про НДДКР і більше рішення про товар.

мінор : починається з 0 при кожному збільшенні основного . +1 для кожної версії, яка оприлюднюється.

реліз : Кожен раз, коли ви стикаєтеся з етапом розвитку та випускаєте продукт, навіть внутрішньо (наприклад, до якості), збільшуйте це. Це особливо важливо для спілкування між командами в організації. Потрібно сказати, що ніколи не випускайте один і той же «випуск» двічі (навіть внутрішньо). Скидання до 0 при другорядних ++ або основних ++.

build : може бути перегляд SVN, я вважаю, що це найкраще працює.

Приклади
Мій поточний хром: 83.0.4103.61


6
Це майже відповідає моєму визначенню версії мого програмного забезпечення. Однак я скидаю реліз до 0, як тільки збільшую "другорядний" номер версії.
BlaM

3
Що для неповнолітнього, якщо ви використовуєте git?
Брайан Карлтон

4
@Brain: Подивітьсяgit describe
Daenyth

4
Ця відповідь така стара ... Я не можу повірити, що коли-небудь використовував SVN. : OI цікаво, якою була б найкраща практика для Git. Можливо, перші кілька цифр хеша комітету? Тож є пристойний шанс отримати унікальну відповідність під час "git show [build]"?
Ассаф Лав'є

Що з "альфами" та "бетами"? Чи збільшуєте ви номер версії до або після виходу програмного забезпечення з альфа-чи бета-версії?
posfan12

68

ксиг

прирости в г нестабільні. (або RC) приріст у z є стабільними та середніми виправленнями помилок.
прирости у y стабільні і означають нові ознаки.
Зростання в х є стабільним, основний випуск без 100% зворотної сумісності.


2
це ваш спосіб чи звичайне використання?
Канавар

30
Про G-місце я не впевнений, решта - загальне.
Itay Moav -Malimovka

1
Гарна схема версій для компонентів. Але для комерційного продукту все, що перебуває за межами xy, просто заплутує клієнта і ускладнює спілкування IMHO. Особливо веб-додатки, які вимагають від клієнта міграції - "
випускайте

1
Але все одно було б добре для налагодження, якщо це щось, що клієнт насправді встановлює / купує, щоб мати повну версію десь приховано.
Pharaun

4
@ ItayMoav-Malimovka Признайся, ти використав "g" просто так, що ти можеш пожартувати.
Андрій

34

Я колись написав складний "посібник зі стилю версій" для мого великого проекту. Проект не здійснився, але посібник зі стилів все ще доступний в Інтернеті . Це моя особиста думка, можливо, вона вам корисна (або натхненна).

Остерігайтеся, це довгий текст, і він переходить у версію компонентів проти версій продукту та подібні речі. Він також висловлює тверду думку щодо деяких схем версій, популярних у спільноті OSS, але я їх маю, тому я висловлюю їх. ;-)

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

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

Редагувати 2: Оскільки достатньо людей вважає мою статтю корисною, щоб зробити це "Приємною відповіддю", я знову почав працювати над статтею. Версії PDF та LaTeX тепер доступні, повне перезапис, що включає кращу мову та пояснювальну графіку, піде, як тільки я знайду час. Дякую за голоси!


1
Як сказав GmonC, це стара тема, але я знайшов її, прочитав ваш зв'язаний документ і хотів сказати, що добре зроблено. Якась відмінна думка, що провокує предмети. Дякую! +1
Карвелл Фентон

1
Прочитавши деякі ваші коментарі до інших відповідей, я сподівався, що ви опублікували відповідь. І мене не підвели. Приємна стаття.
jontyc

31

Отримайте собі натхнення з Вікіпедії: "Версія програмного забезпечення"

Ще один "новий" і "відносно популярний" варіант - семантична версія

Підсумок:

Враховуючи номер версії MAJOR.MINOR.PATCH, збільшуйте:

  1. ОСНОВНА версія, коли ви вносите несумісні зміни API,
  2. МІНОРОЖНА версія, коли ви додаєте функціональність у сумісному сумісному режимі;
  3. Версія PATCH, коли ви робите назад сумісні виправлення помилок.

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


2
@Ravi - можливо, але це може бути скасовано. Так потрібна репутація для редагування. Підсумок, принаймні, був би кращим для людей, які скумують це питання.
Натан Лонг

@Nathan, якщо ви використовуєте SO, ви, безумовно, можете використовувати історію редагування статей у Вікіпедії.
CMircea

11
@iconiK - Якщо ви використовуєте SO, ви, безсумнівно, розумієте, що "Ось ясна, лаконічна відповідь на тій же сторінці з іншими відповідями" корисніше, ніж "ось посилання на інший сайт, де ви можете перекопати старі версії статті та можливо, знайдіть щось відповідне ».
Натан Лонг

11

а Б В Г

Збільшення: коли
- d : виправлення помилок
- c : обслуговування, наприклад поліпшення продуктивності
- b : нові функції
- a : зміна архітектури

Обов'язковим є самий лівий, наприклад, якщо є, наприклад, нова функція та виправлена ​​помилка, тоді вам потрібно лише збільшити b .


Назвіть кілька прикладів архітектурних змін?
eaglei22

1
Наприклад, прогресивна міграція до мікропослуг або перехід на іншу платформу, яка передбачає кардинальні зміни щодо базового коду,
Алексіс Гамарра

9

На основі свого досвіду роботи зі складним управлінням рівнями корпоративних платформ та версій версій я прийшов рекомендувати підхід, який я люблю називати напівсемантичним версією .

По суті, він створює семантичну версію 2.0, але не настільки суворий.

Напівсемантичні сегменти версії:

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

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

МАРКЕТТИНГ.MAJOR.MINOR.PATCH

Кожен сегмент повинен містити буквено-цифрові показники, але для логічних додаткових змін рекомендується чиста цифра.

Як і SemVer, я рекомендую компонентам Major, Minor та Patch представляти рівні зворотної сумісності, але також рекомендую попередньо використовувати маркетинговий компонент . Це дозволяє власникам продуктів, епосам / групам та бізнес-питанням перешкоджати основній складовій незалежно від проблем технічної сумісності.

На відміну від інших відповідей, я не рекомендував додавати номер збірки до основного сегмента. Натомість додайте сегмент після випуску після «+» (напр .: 1.1.0.0 + збірка.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, щоб було легко прив'язати до сховища коду. Іншим варіантом є використання сегменту після випуску для виправлень та виправлень, тому, можливо, варто розглянути можливість додавання нового основного компонента випуску для цього. Він завжди може випадати, коли компонент патчу збільшується, оскільки версії ефективно вирівнюються по лівому краю та сортуються.

Окрім сегментів після випуску та після випуску, люди часто хочуть використовувати сегмент перед випуском для позначення майже стабільних попередніх релізів, таких як альфа, бета-версія та кандидати в реліз. Підхід 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). Додано сегменти попереднього випуску, які вказують на те, що випускається версія випуску, як правило, це лише фіксований набір функцій для більш глибокого тестування та обміну, що не змінюється хвилиною на хвилину на основі більшої кількості комісій.

Краса того, що все це семантично визначено таким чином, що охоплює майже всі випадки використання, полягає в тому, що ви можете їх аналізувати, сортувати, порівнювати та збільшувати стандартним чином. Це особливо важливо при використанні систем ІС для складних програм із безліччю маленьких компонентів, незалежних від незалежності (наприклад, мікро-сервіси), кожен з яких має власні керовані залежності.

Якщо вам цікаво, я написав напівсемантичний парсер в рубіні . Мені потрібно було не просто використовувати цю схему, але й мати можливість керувати іншими програмами, які її використовували.


4

"Номери версій" є предметом вашої внутрішньої системи контролю версій. Номери релізів - це різна справа (і KEPT має бути різною).

Дотримуйтесь простої системи випуску MAJOR.MINOR (наприклад, v1.27), де MAJOR - рівень сумісності (версія 2.x несумісна або, принаймні, значно відрізняється від версії 1.x), а MINOR - ваші випуски помилок або незначні вдосконалення . Поки ви дотримуєтесь формату XY, ви також можете використовувати інші системи, такі як YEAR.MONTH (2009.12) або YEAR.RELEASE (2009.3). Але насправді ви, мабуть, найкраще дотримуватися MAJOR.MINOR, якщо у вас немає вагомих причин цього не робити.

Однозначно не використовуйте нічого, що не відповідає формату XY, оскільки це ускладнить роботу з вами дистрибутивами, веб-сайтами оголошень тощо. Це одне може серйозно вплинути на популярність вашого проекту.

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

І так, 1,0 має бути стабільним. Усі випуски повинні бути стабільними, якщо вони не позначені альфа, бета або RC. Використовуйте альфа-алфавіти для відомих зламаних і неповних. Бета-версія для відомого-сломанной. РК для "спробуйте; ви, ймовірно, помітите те, що ми пропустили". Все, що не має одного з них, повинно бути (в ідеалі, звичайно) перевіреним, добре відомим, мати сучасний посібник тощо.


1
Я погоджуюсь, що бачить користувач і те, що ви будуєте, це дві різні речі, але чи не потрібно це якось зв’язувати? тобто номери випуску та версії повинні бути пов’язані, і ви зможете відкрити номер версії з номером випуску
Jeffrey Cameron

З відкритим кодом нас не хвилює кількість збірок. Ми поширюємо вихідний код, а збірки - до дистрибутивів. Якщо вони бачать помилку у своїй версії, але не у вихідному випуску, то вони зробили щось не так у збірці. В іншому випадку це код для цього тегу випуску. Теги також видно в VC.
Лі Б

2

У цей час досить популярно використовувати номер версії Subversion.


1
Дивіться мою відповідь - номер редакції SVN розривається, коли ви налаштовуєте відділення технічного обслуговування.
DevSolar

3
Використання версії SVN як ЧАСТИНИ вашого номера версії дуже поширене / популярне. Використання лише номера редакції SVN має безліч проблем, наприклад, те, що вказує DevSolar.
rmeador

2

Якщо він знаходиться у SVN, то чому б не використати номер редакції SVN?

Якщо ви подивитесь праворуч внизу цієї веб-сторінки, ви побачите номер версії стека переповнення, який є номером версії SVN.


1
Дивіться мою відповідь - номер редакції SVN розривається, коли ви налаштовуєте відділення технічного обслуговування.
DevSolar

2

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

Ви хочете певним чином прив’язати номер версії до точно використовуваної збірки, але ви, мабуть, хочете, щоб вона була приємною та простою для ваших кінцевих користувачів. Подумайте про використання стандартних номерів версій та позначення сховища SVN із включеним номером версії.


2

Хоча просто переходити з номером версії Subversion є приємним і простим, він видаляє інформацію з номера версії. Користувачі можуть вважати це поганою справою.

Я припускаю, що ваш веб-сервер буде мати якусь процедуру розгортання, так що не кожна версія в Subversion фактично публікується. Оскільки ззовні (з точки зору користувача) неможливо визначити, коли здійснюються випуски, і скільки змін буде проходити код між ними, це робить цифри майже випадковими. Вони будуть рости, і я думаю , що можна припустити , яке - то відстань від порівняння два ревізій, але не так багато.

Класичні номери версій, як правило, "драматизують" випуски, так що користувачі можуть будувати якесь очікування. Простіше думати "у мене версія 1.0, тепер версія 1.1 додається це і те, що звучить цікавіше", ніж думати: "вчора ми провели перегляд 2587, сьогодні це 3233, це має бути набагато краще!".

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


2

Версія схеми: [мажор]. [Мінор]. [Devrel] [марка]
[мажор]: приріст, якщо у вас різкі зміни в розвитку.
[другорядний]: приріст, якщо у вас незначні зміни в розвитку.
[devrel]: приріст, якщо у вас виправлено помилку. Скиньте до нуля, якщо основний ++ або мінор ++.
[позначка]: a, b або rc: a - це альфа-реліз, b - бета-реліз, а rc - кандидат у випуск. Зауважте, що такі версії, як 1.3.57a або 1.3.57b або 1.3.57rc, є до версії 1.3.57. Початок з 0,0.0.


1

Ми витратили занадто багато часу, вирішуючи, коли збільшити основну версію. Деякі магазини рідко роблять це, тож у вас є випуски типу 1.25.3, а інші роблять це для того, щоб коли-небудь випустити, даючи вам 15.0

Я втомився від цього і переконав усіх, що основний номер випуску - це лише рік, а мінор - лише послідовний реліз протягом року. Користувачам, здавалося, це сподобалось, і не потрібно, щоб придумати наступний номер версії.

Рік. Випустіть

  • рік = поточний рік
  • release = послідовність # публічних випусків з новою функціональністю - скидайте на 1 щороку
  • build = збільшується для виправлень помилок та внутрішніх випусків

EDIT

** Тепер це було для внутрішнього додатка, який постійно удосконалювався **

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


2
... що робить перший реліз нового року автоматично "основним випуском", незалежно від значущих змін. І ви не зможете зробити "головний" реліз протягом року ...
DevSolar

1

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

Те, як мені подобається робити номер версії, - це лише ціле збільшення з 1. Я не хочу багаточастинного номера версії, який мені доведеться пояснювати або документувати. І я не хочу використовувати номер випуску SVN, оскільки це також потребує деяких пояснень.

Вам знадобиться кілька сценаріїв випуску поверх SVN, щоб це сталося


0

У мене дуже мало досвіду в цій області. Однак ось що я б робив:

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

Звичайно, ви можете просто скористатись номером редакції svn ---, як запропонували багато інших !!!

Я сподіваюся, що це допомагає.


0

Ми використовуємо простий синтаксис major.minor.julian_date.

Де;

  • основний - Спочатку випуск дорівнює 1, а потім, коли ми впроваджуємо основні нові функції або зміни, настільки значні, що вони не є сумісними назад, збільшують це число.
  • другорядний - Основні віхи випусків. Для кожної побудови, що підштовхується виробництвом, ця кількість збільшується.
  • julian_date - Юліанський день збірки був висунутий до QA.

Приклад першого випуску, натиснутого на QA на 1/15, -> 1.0.015.
Приклад першого випуску, натиснутого на Production на 3/4, -> 1.1.063

Це не ідеально, але зручно, оскільки ми щодня підштовхуємо будівництво до забезпечення якості.


0

Ось хороша інформація тут:

Коли потрібно змінити версії файлів / складання

Перш за все, версії файлів та версії для складання не повинні збігатися між собою. Я рекомендую, щоб версії файлів змінювалися з кожною збіркою. Але не змінюйте версії для складання з кожною збіркою просто так, щоб ви могли визначити різницю між двома версіями одного файлу; використовувати для цього версію файлу. Вирішення питання про те, як змінити версії монтажу, потребує певного обговорення типів складання: доставка та неперевезення.

Загальнодоступні склади Загалом, я рекомендую зберігати версії збірок без доставки однаковими між складами доставки. Це дозволяє уникнути сильно названих проблем із завантаженням збірок через невідповідність версій. Деякі люди вважають за краще використовувати політику видавця для перенаправлення нових версій збірок для кожної збірки. Однак, я рекомендую проти цього не для доставки, але це не дозволяє уникнути всіх проблем із завантаженням. Наприклад, якщо партнер x-копіює ваш додаток, він може не знати про встановлення політики видавця. Тоді ваша програма для них буде зламана, навіть якщо вона працює чудово на вашій машині.

Але, якщо є випадки, коли різні програми на одній машині повинні прив'язуватися до різних версій вашої збірки, я рекомендую надати цим збірникам різні версії збірки, щоб правильну для кожного додатка можна було використовувати без необхідності використання LoadFrom / тощо.

Доставка складання Що стосується того, чи є хорошою ідеєю змінити цю версію для доставки збірок, це залежить від того, як ви хочете, щоб прив'язка працювала для кінцевих користувачів. Ви хочете, щоб ці збірки були поруч або на місці? Чи багато змін між двома побудовами? Вони збираються зламати деяких клієнтів? Вам не байдуже, що це порушує їх (чи ви хочете змусити користувачів використовувати ваші важливі оновлення)? Якщо так, слід розглянути можливість збільшити версію збірки. Але, знову ж таки, врахуйте, що це занадто багато разів може засмітити диск користувача застарілими збірками.

Коли ви змінюєте версії складання Щоб змінити твердо кодовані версії на нові, я рекомендую встановити змінну версії у файлі заголовка та замінити жорстке кодування у джерелах змінною. Потім під час збирання запустіть попередній процесор, щоб ввести правильну версію. Я рекомендую міняти версії відразу після доставки, а не безпосередньо перед тим, щоб було більше часу на вилов помилок через зміну.


-3

Або скористатись вашим «продуманим» номером версії номер підривної кома .. zB:

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

або 1.0.101-090303 // з датою випуску, я використовую це

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.