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