Основываясь на своем опыте со сложным управлением зависимостями уровня корпоративной платформы и версиями версий, я пришел, чтобы порекомендовать подход, который я люблю называть « Полусемантическое управление версиями» .
По сути, он основан на Semantic Versioning 2.0, но не настолько строг.
Полусемантическая версия Сегменты:
<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]
Основной формат сегмента выпуска:
MARKETTING.MAJOR.MINOR.PATCH
Каждый сегмент должен содержать буквенно-цифровые символы, но для логических инкрементальных изменений рекомендуется использовать чистые цифры.
Как и SemVer, я рекомендую компоненты Major, Minor и Patch для представления уровней обратной совместимости, но я также рекомендую добавлять компонент Marketing . Это позволяет владельцам продуктов, эпосам / группам функций и бизнес-задачам затрагивать основной компонент независимо от проблем технической совместимости.
В отличие от других ответов, я не рекомендовал добавлять номер сборки в основной сегмент. Вместо этого добавьте сегмент после выпуска, следующий за «+» (например: 1.1.0.0 + build.42). SemVer вызывает эти метаданные сборки, но я думаю, что сегмент Post-Release более ясен. Этот сегмент отлично подходит для объявления данных суффикса как не связанных с информацией о совместимости в основном выпуске., Затем вашим сборкам с непрерывной интеграцией может быть присвоен предыдущий номер выпуска с добавлением добавочного номера сборки, который сбрасывается после каждого основного выпуска (например: 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 . Мне нужно было не просто использовать этот шаблон, но и иметь возможность управлять другими приложениями, которые его использовали.