Перейти к основному содержимому

Версионирование

В большинстве случаев я придерживаюсь стандарта SemVer v2.0. Номера версий имеют следующий формат:

Major.Minor.Patch[-Suffix]
  • Major (основной номер) — критические изменения, влияющие на обратную совместимость.
  • Minor (дополнительный номер) — существенные изменения с сохранением обратной совместимости (добавление, удаление, изменение функционала).
  • Patch (исправление) — исправление ошибок, с сохранением обратной совместимости.
  • -Suffix (суффикс) — опционально, может быть использован для выпуска предварительных версий. Если предварительных версий множество, дополнительный номер выпуска указывается через точку. Например, -alpha, -beta, -rc, -alpha.1, -beta.5.

Примеры:

  • 1.0.0
  • 1.0.0-alpha.7
  • 1.2.21
  • 1.1.0-beta.1

Нумерация основного номера (major) начинается с единицы. В редких случаях, например в Python, может начинаться с нуля.

В проектах .NET стандарт SemVer v2.0 используется в качестве номера пакета (Package Version). Для версий сборок (Assembly Version) используется номер из четырёх чисел, первые три соответствуют выше указанной схеме, а четвертное число — номер сборки (автоматический номер сборки из Jenkins, TeamCity и т.п., либо просто счётчик).

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

Также удобно указывать хэш последней фиксации (git hash) в номер версии, если есть такая техническая возможность. Это полезно в больших проектах-приложениях, когда используются разные окружения (Test, UAT, Prod), есть QA или возможность получения обратной связи от пользователей.

Примеры номеров версии с метаданными из системы контроля версий (таких как git):

  • 1.0.0.272+9a847b1
  • 1.2.0.59+9a847b1489be6642b90ff53c0803d21bc8d2cae2
  • 3.4.7.1708+9a847b1489be6642b90ff53c0803d21bc8d2cae2;2025-09-23T11:01:11;master