Семантическое управление версиями 1.0.0-rc.1 / Хабр
В мире разработки программного обеспечения, существует страшное место, называемое «ад зависимостей». Чем больше ваша система, тем больше шанс, что в один из дней вы попадете в эту ловушку.В системе с большим количеством зависимостей, выпуск новых пакетов может быстро превратиться в кошмар. Если зависимости слишком прочные, вы не можете обновить пакет, не обновив при этом версии всех зависимых пакетов. Если зависимости слишком свободные, у вас возникнут проблемы с распущенностью версий. «Ад зависимостей», это когда слишком прочные, или наоборот, слишком свободные зависимости не дают вам легко и безопасно развивать ваш проект.
Как решение этой проблемы, я предлагаю простой набор правил, которые диктуют как присваивать и увеличивать номера версий. Для того, что бы система работала, для начала, вам нужно объявить открытый API. Это должен быть простой и ясный документ. Рассмотрим номер версии в формате X.Y.Z (Major. Minor.Patch).
Я называю эту систему «Семантическое управление версиями». Согласно этой схеме, номера версий и то, как они меняются несут в себе смысл об основном коде и о том, как он изменялся от версии к версии.
Спецификация Семантического управления версиями
Ключевые слова «ДОЛЖЕН (MUST)», «НЕ ДОЛЖЕН (MUST NOT)», «СЛЕДУЕТ (SHOULD)», «НЕ СЛЕДУЕТ (SHOULD NOT)», «МОЖЕТ (MAY)», в этом документе должны интерпретироваться в соответствии с RFC 2119.- Программный продукт использующий Семантическое управление версиями ДОЛЖЕН иметь открытый API. Это API должно быть объявлено внутри кода или в прикладной документации. API должно быть точным и исчерпывающим.
- Номер версии ДОЛЖЕН состоял из X. Y.Z, где X, Y, и Z это положительные числа. X это Major версия, Y это Minor версия и Z это Patch версия. Каждый элеме ДОЛЖЕН увеличиваться с шагом один. Например: 1.9.0 -> 1.10.0 -> 1.11.0.
- Когда Major версия увеличивается, Minor и Patch версии ДОЛЖНЫ обнуляться. Когда Minor версия увеличивается, Patch версия должны обнуляться. Например: 1.1.3 -> 2.0.0 и 2.1.7 -> 2.2.0.
- После того как версия пакета выпущена, в этот пакет НЕ ДОЛЖНО вноситься никаких изменений. Все изменения ДОЛЖНЫ выпускаться с новой версией.
- В начале разработки Major версия равна нулю (0.y.z). В этот период, что нибудь может измениться в любое время. Открытое API НЕ ДОЛЖНО считаться стабильным.
- Версия 1.0.0 определяет открытое API. То, как изменяется номер версии, зависит от этого открытого API.
- Patch версия Z (x.y.Z | x > 0) ДОЛЖНА быть увеличена только если исправления ошибок имеют обратную совместимость с предыдущими версиями. Исправление ошибок устраняет некорректное поведение.
- Minor версия Y (x.Y.z | x > 0) ДОЛЖНА быть увеличена если внесены исправления, совместимые с предыдущими версиями. Minor версия ДОЛЖНА быть увеличена если какой либо элемент API помечен как «Устаревший». Minor версия МОЖЕТ быть увеличена, при наличии существенных новых функциональных возможностей или улучшений. Minor версия МОЖЕТ включать изменения Patch версии. Patch версия должна обнуляться, когда изменяется Minor версия.
- Major версия X (X.y.z | X > 0) ДОЛЖНА быть увеличена если внесены исправления, несовместимые с предыдущими версиями. Major версия МОЖЕТ включать изменения Minor и Patch версий. Patch и Minor версии должны обнуляться, когда изменяется Major версия.
- Предварительные версии МОГУТ быть обозначены тире и идентификатором, разделенным точками, сразу после Patch версии. Идентификатор ДОЛЖЕН содержать символы [0-9A-Za-z-]. Предварительная версия имеет меньший приоритет, чем такая же нормальная версия. Примеры: 1.0.0-alpha, 1.0.0-alpha. 1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.
- Версия сборки МОЖЕТ быть обозначена знаком плюс и идентификатором, разделенным точками, сразу же после версии Patch или предварительной версии. Идентификатор ДОЛЖЕН содержать символы [0-9A-Za-z-]. Версия сборки имеет больший приоритет, чем такая же нормальная версия.
Примеры: 1.0.0+build.1, 1.3.7+build.11.e0f985a. - Приоритет ДОЛЖЕН рассчитываться путем разделения на Major, Minor, Patch, предварительные и сборочные версии. Major, Minor и Patch версии всегда содержат цифры. Предварительные и сборочные версии ДОЛЖНЫ быть отсортированы путем сравнения каждого идентификатора разделенного точкой по следующей схеме: Идентификаторы содержащие только цифры сравниваются числено, содержащие буквы по порядку указанному
Почему нужно использовать Семантическое управление версиями?
Это не новая или революционная идея. На самом деле, вы уже наверное делали, что то похожее. Проблема в том, что «похожее» не является достаточно хорошим. Без соответствия какой-то формальной спецификации, номера версий по существу бесполезны для управления зависимостями. Давая ясные и в меру гибкие определения,вы облегчаете взаимодействие пользователей с вашим продуктом.
Простой пример, который покажет как Семантическое управление версиями поможет избежать ада зависимостей. Рассмотрим библиотеку с названием «Firetruck». Она зависим от пакета с названием «Ladder». Когда создали Firetruck, версия Ladder была 3.1.0. Так как Firetruck использует различные методы которые были представлены в 3.1.0, вы можете спокойно обновлять Ladder до версии больше чем 3.1.0 но меньше чем 4.0.0. Теперь, когда становятся доступными версии 3. 1.1 и 3.2.0 пакета Ladder, вы можете перейти на них и знать, что они будут совместимы с существующим программным обеспечением.
Как ответственный разработчик, вы конечно захотите проверить совместимость пакетов. Реальность может быть жестокой, мы ничего не можем сделать с этим. Что мы можем сделать, так это позволить Семантическому управлению версиями предоставить вам простой способ обновления пакетов. Это сохранит ваше время и нервы.
Если вам понравилась идея Семантического управления версиями, вам нужно просто следовать правилам изложенным здесь. Вы можете разместить в README файле вашего проекта ссылку на эту документацию, что бы ваши коллеги, а так же люди использующие ваш продукт, так же следовали Семантическому управлению версиями.
FAQ
Как я должен изменять номер версии на начальном этапе 0.yz?
Проще всего, это начать с версии 0.1.0 и затем увеличить номер версии для каждого последующего релиза.Как узнать, что пора переходить на версию 1.
0.0? Если ваш продукт начали использовать конечные потребители, он должен иметь версию 1.0.0. Если у вас есть стабильное открытое API, вы должны перейти на 1.0.0. Если вы переживаете об обратной совместимости, вы должны перейти на 1.0.0.Разве это не препятствует быстрому развитию и быстрой итерации?
Нулевая Major версия, это все что вам нужно. Если ваше открытое API меняется каждый день, вы должны находиться в версии 0.x.x или работать над следующей Major версией.Если даже мельчайшие изменения не имеют обратной совместимости, не буду ли я в скором времени в версии 42.0.0?
Это вопрос ответственного развития и предвидения. Несовместимые изменения не должны вноситься маленькими порциями в код, у которого есть много зависимостей. Расходы на обновление могут быть слишком значительными.Документация API это слишком много работы!
Это ваша ответственность, как профессионального разработчика, создающего продукт предназначенный для использования другими людьми. Управление программным обеспечением является сложной и чрезвычайно важной частью поддержания эффективности проекта.Что делать если я случайно указал Minor версию вместо Major?
Как только вы поняли, что вы сломали Семантическое управление версиями, вы должны зафиксировать проблему и выпустить новую версию, которая исправляет проблемы и восстанавливает обратную совместимость.Что мне делать, если я обновлю свою внутреннюю зависимость, не меняя открытого API?
Это допустимо, если не как не влияет на открытое API. Продукт который явно зависит от вашего пакета должен иметь свою спецификацию зависимостей и автор заметит конфликт.Как мне отметить устаревшую функциональность?
Устаревшая функциональность, это нормально и часто приходится прибегать к ней, для того, что бы двигаться вперед. Когда вы помечаете как устаревшую часть вашего открытого API, вы должны сделать две вещи: (1) обновить документацию, (2) выпустить хотя бы один релиз поддерживающий как новую, так и устаревшую функциональность, что бы пользователи успели плавно перестроиться.Об авторе
Автор Семантическое управление версиями Tom Preston-Werner, создатель Gravatars и соучредитель GitHub.Для того что бы высказать ваши вопросы и пожелания создайте вопрос на GitHub.
Этот перевод на GitHub
Лицензия
Creative Commons — CC BY 3.0http://creativecommons.org/licenses/by/3.0/
„Concerto fantastico“ ми минор для скрипки с оркестром. Ноктюрн ре мажор для скрипки с оркестром. В переложении для скрипки и фортепиано. Ноты / „Concerto fantastico“ E minor for violin and orchestra. Nocturne D major for violin and orchestra. Sheet music
950 ₽ + до 142 бонусовКупить
Цена на сайте может отличаться от цены в магазинах сети. Внешний вид книги может отличаться от изображения на сайте.
В наличии 2 шт2
Цена на сайте может отличаться от цены в магазинах сети. Внешний вид книги может отличаться от изображения на сайте.
В данное издание вошли два произведения норвежского композитора XIX века Уле Булля. Это ноктюрн ре мажор для скрипки с оркестром (переложение для скрипки и фортепиано) и скрипичный концерт ми минор, Concerto fantastico. Концерт из трех частей для скрипки с оркестром ми минор, отличает высокая виртуозность, выразительная мелодика и строгая форма. Лиричный ноктюрн ре мажор представляет собой прекрасную кантиленную пьесу, позволяющую скрипачу продемонстрировать также и свои технические возможности. .Издание адресовано скрипачам-исполнителям, студентам и преподавателям музыкальных учебных заведений. . .
Описание
Характеристики
В данное издание вошли два произведения норвежского композитора XIX века Уле Булля. Это ноктюрн ре мажор для скрипки с оркестром (переложение для скрипки и фортепиано) и скрипичный концерт ми минор, Concerto fantastico. Концерт из трех частей для скрипки с оркестром ми минор, отличает высокая виртуозность, выразительная мелодика и строгая форма. Лиричный ноктюрн ре мажор представляет собой прекрасную кантиленную пьесу, позволяющую скрипачу продемонстрировать также и свои технические возможности. .Издание адресовано скрипачам-исполнителям, студентам и преподавателям музыкальных учебных заведений. . .
Планета Музыки
На товар пока нет отзывов
Поделитесь своим мнением раньше всех
Как получить бонусы за отзыв о товаре
1
Сделайте заказ в интернет-магазине2
Напишите развёрнутый отзыв от 300 символов только на то, что вы купили3
Дождитесь, пока отзыв опубликуют.Если он окажется среди первых десяти, вы получите 30 бонусов на Карту Любимого Покупателя. Можно писать неограниченное количество отзывов к разным покупкам – мы начислим бонусы за каждый, опубликованный в первой десятке.
Правила начисления бонусовЕсли он окажется среди первых десяти, вы получите 30 бонусов на Карту Любимого Покупателя. Можно писать неограниченное количество отзывов к разным покупкам – мы начислим бонусы за каждый, опубликованный в первой десятке.
Правила начисления бонусовКнига «„Concerto fantastico“ ми минор для скрипки с оркестром. Ноктюрн ре мажор для скрипки с оркестром. В переложении для скрипки и фортепиано. Ноты / „Concerto fantastico“ E minor for violin and orchestra. Nocturne D major for violin and orchestra. Sheet music» есть в наличии в интернет-магазине «Читай-город» по привлекательной цене. Если вы находитесь в Москве, Санкт-Петербурге, Нижнем Новгороде, Казани, Екатеринбурге, Ростове-на-Дону или любом другом регионе России, вы можете оформить заказ на книгу «„Concerto fantastico“ ми минор для скрипки с оркестром. Ноктюрн ре мажор для скрипки с оркестром. В переложении для скрипки и фортепиано. Ноты / „Concerto fantastico“ E minor for violin and orchestra. Nocturne D major for violin and orchestra. Sheet music» и выбрать удобный способ его получения: самовывоз, доставка курьером или отправка почтой. Чтобы покупать книги вам было ещё приятнее, мы регулярно проводим акции и конкурсы.
Семантическое управление версиями 2.0.0 | Семантическое управление версиями
Сводка
Учитывая номер версии MAJOR.MINOR.PATCH, увеличьте:
- ОСНОВНУЮ версию при внесении несовместимых изменений API
- MINOR версия при добавлении функциональности в обратно совместимом манера
- Версия PATCH при исправлении ошибок с обратной совместимостью
Дополнительные метки для метаданных предварительной версии и сборки доступны в качестве расширений в формат MAJOR.MINOR.PATCH.
Введение
В мире управления программным обеспечением существует ужасное место под названием «ад зависимости». Чем больше растет ваша система и чем больше пакетов вы интегрировать в свое программное обеспечение, тем больше шансов, что вы найдете себя, один день, в этой яме отчаяния.
В системах со многими зависимостями выпуск новых версий пакетов может быстро стать кошмаром. Если спецификации зависимостей слишком жесткие, вы находитесь в опасность блокировки версии (невозможность обновить пакет без необходимости выпускать новые версии каждого зависимого пакета). Если зависимости указано слишком свободно, вас неизбежно укусит неразборчивость версий (при условии совместимости с большим количеством будущих версий, чем это разумно). Ад зависимостей — это то, где вы находитесь, когда блокировка версий и/или неразборчивость версий мешают вам легко и безопасно продвигать свой проект вперед.
В качестве решения этой проблемы мы предлагаем простой набор правил и требования, определяющие, как назначаются и увеличиваются номера версий. Эти правила основаны на ранее существовавших правилах, но не обязательно ограничиваются ими. широко распространенные общие практики использования как в закрытом, так и в открытом программном обеспечении. Чтобы эта система работала, вам сначала нужно объявить публичный API. Это может состоять из документации или обеспечиваться самим кодом. Несмотря ни на что, это важно, чтобы этот API был ясным и точным. Как только вы определите свою публику API, вы сообщаете об изменениях в нем с конкретными приращениями к вашей версии число. Рассмотрим формат версии X.Y.Z (Major.Minor.Patch). Исправления ошибок не влияет на API, увеличивает версию исправления, обратно совместимый API дополнения/изменения увеличивают минорную версию и обратно несовместимый API изменения увеличивают основную версию.
Мы называем эту систему «Семантическое управление версиями». По этой схеме номера версий и то, как они меняются, передает смысл лежащего в основе кода и того, что было была изменена от одной версии к другой.
Спецификация семантической версии (SemVer)
Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «СЛЕДУЕТ», «НЕ ДОЛЖЕН», «РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и «ДОПОЛНИТЕЛЬНО» в этом документе должны быть интерпретируется, как описано в RFC 2119.
Программное обеспечение, использующее семантическое управление версиями, ДОЛЖНО объявить общедоступный API. Этот API могут быть объявлены в самом коде или существовать строго в документации. Как бы это ни было сделано, оно ДОЛЖНО быть точным и всеобъемлющим.
Обычный номер версии ДОЛЖЕН иметь форму X.Y.Z, где X, Y и Z неотрицательные целые числа и НЕ ДОЛЖНЫ содержать ведущие нули. Х это основная версия, Y — дополнительная версия, а Z — версия исправления. Каждый элемент ДОЛЖЕН увеличиваться численно. Например: 1,9.0 -> 1.10.0 -> 1.11.0.
После выпуска версии пакета содержимое этой версии НЕ ДОЛЖЕН быть изменен. Любые модификации ДОЛЖНЫ быть выпущены как новая версия.
Нулевая основная версия (0.y.z) предназначена для начальной разработки. Все МОЖЕТ измениться в любое время. Публичный API НЕ ДОЛЖЕН считаться стабильным.
Версия 1.0.0 определяет общедоступный API. Способ, которым номер версии увеличивается после того, как этот выпуск зависит от этого общедоступного API и от того, как он изменения.
Версия исправления Z (x.y.Z | x > 0) ДОЛЖНА быть увеличена, если только назад вводятся совместимые исправления ошибок. Исправление ошибки определяется как внутреннее изменение, исправляющее некорректное поведение.
Младшая версия Y (x.Y.z | x > 0) ДОЛЖНА быть увеличена, если новая, назад совместимые функции представлены в общедоступном API. Это должно быть увеличивается, если какие-либо общедоступные функции API помечены как устаревшие. МОЖЕТ быть увеличивается, если вводятся существенные новые функции или улучшения внутри личного кода. Он МОЖЕТ включать изменения уровня исправления. Версия патча ДОЛЖЕН быть сброшен на 0 при увеличении дополнительной версии.
Основная версия X (X.y.z | X > 0) ДОЛЖНА быть увеличена, если какая-либо обратная версия в общедоступный API вносятся несовместимые изменения. Он МОЖЕТ также включать незначительные и изменения уровня патча. Патчи и второстепенные версии ДОЛЖНЫ быть сброшены на 0, когда основные версия увеличивается.
Предварительная версия МОЖЕТ обозначаться добавлением дефиса и серия разделенных точками идентификаторов сразу после патча версия. Идентификаторы ДОЛЖНЫ содержать только буквенно-цифровые символы ASCII и дефисы. [0-9А-За-з-]. Идентификаторы НЕ ДОЛЖНЫ быть пустыми. Числовые идентификаторы ДОЛЖНЫ НЕ включать лидирующие нули. Предварительные версии имеют более низкую приоритет, чем связанная нормальная версия. Предварительная версия указывает на то, что версия нестабильна и может не удовлетворять предполагаемые требования совместимости, обозначенные соответствующими нормальная версия. Примеры: 1.0.0-альфа, 1.0.0-альфа.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92, 1.0.0-x-y-z.—.
Метаданные сборки МОГУТ обозначаться добавлением знака плюс и ряда точек разделенные идентификаторы сразу после исправления или предварительной версии. Идентификаторы ДОЛЖНЫ содержать только буквенно-цифровые символы ASCII и дефисы [0–9].А-За-з-]. Идентификаторы НЕ ДОЛЖНЫ быть пустыми. Метаданные сборки ДОЛЖНЫ игнорироваться при определении приоритет версии. Таким образом, две версии, которые отличаются только метаданными сборки, имеют одинаковый приоритет. Примеры: 1.0.0-альфа+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85, 1.0.0+21AF26D3—-117B344092BD.
Приоритет относится к тому, как версии сравниваются друг с другом при заказе.
Приоритет ДОЛЖЕН рассчитываться путем разделения версии на основную, второстепенные идентификаторы, идентификаторы исправлений и предварительных выпусков в указанном порядке (метаданные сборки не фигурирует в приоритете).
Приоритет определяется первым отличием при сравнении каждого из эти идентификаторы слева направо следующим образом: основной, второстепенный и патч версии всегда сравниваются численно.
Пример: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1.
Если основной, дополнительный и патч совпадают, предварительная версия имеет более низкий приоритет, чем у обычной версии:
Пример: 1.0.0-альфа < 1.0.0.
Приоритет для двух предварительных версий с одинаковыми основными, вспомогательными и версия патча ДОЛЖНА определяться путем сравнения каждого идентификатора, разделенного точкой слева направо, пока не будет найдена следующая разница:
Идентификаторы, состоящие только из цифр, сравниваются численно.
Идентификаторы с буквами или дефисами сравниваются лексически в ASCII Порядок сортировки.
Числовые идентификаторы всегда имеют более низкий приоритет, чем нечисловые. идентификаторы.
Большой набор предварительных полей имеет более высокий приоритет, чем меньший набор, если все предыдущие идентификаторы равны.
Пример: 1.0.0-альфа < 1.0.0-альфа.1 < 1.0.0-альфа.бета < 1.0.0-бета < 1.0.0-бета.2 < 1.0.0-бета.11 < 1.0.0-rc.1 < 1.0.0.
Грамматика формы Бэкуса–Наура для действительных версий SemVer
<действительный semver> ::= <версия ядра> | <версия ядра> "-" <предварительная версия> | <версия ядра> "+" <сборка> | <версия ядра> "-" <предварительная версия> "+" <сборка> <версия ядра> ::= <основная> ". " <второстепенный> "." <патч> <старший> ::= <числовой идентификатор> <второстепенный> ::= <числовой идентификатор> <патч> ::= <числовой идентификатор>::= <предварительные идентификаторы, разделенные точками> <предварительные идентификаторы, разделенные точками> ::= <предварительный идентификатор> | <предварительный идентификатор> "." <предварительные идентификаторы, разделенные точками> ::= <идентификаторы сборки, разделенные точками> <идентификаторы сборки, разделенные точками> ::= <идентификатор сборки> | <идентификатор сборки> "." <идентификаторы сборки, разделенные точками> <предварительный идентификатор> ::= <буквенно-цифровой идентификатор> | <числовой идентификатор> <идентификатор сборки> ::= <буквенно-цифровой идентификатор> | <цифры> <буквенно-цифровой идентификатор> ::= <нецифровой> | <не цифра> <идентификационные символы> | <идентификационные символы> <нецифры> | <идентификационные символы> <не цифры> <идентификационные символы> <числовой идентификатор> ::= "0" | <положительная цифра> | <положительная цифра> <цифры> <идентификационные символы> ::= <идентификационные символы> | <идентификационный символ> <идентификационный символ> <идентификационный символ> ::= <цифра> | <не цифра> <не цифра> ::= <буква> | "-" <цифры> ::= <цифра> | <цифра> <цифры> <цифра> ::= "0" | <положительная цифра> <положительная цифра> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" <буква> ::= "А" | "Б" | "С" | "Д" | "Е" | "Ф" | "Г" | "Х" | "Я" | "Дж" | "К" | "Л" | "М" | "Н" | "О" | "П" | "Кью" | "Р" | "С" | "Т" | "У" | "В" | "В" | "Х" | "Ю" | "З" | "а" | "б" | "с" | "д" | "е" | "ф" | "г" | "ч" | "я" | "дж" | "к" | "л" | "м" | "н" | "о" | "п" | "к" | "р" | "с" | "т" | "у" | "в" | "ж" | "Икс" | "у" | "з"
Зачем использовать семантическое управление версиями?
Это не новая и не революционная идея. На самом деле, вы, вероятно, что-то делаете уже близко к этому. Проблема в том, что «близко» недостаточно. Без соответствие какой-либо формальной спецификации, номера версий по существу бесполезен для управления зависимостями. Дав имя и очистив определение вышеуказанным идеям, становится легко сообщить о своих намерениях пользователям вашего программного обеспечения. Как только эти намерения станут ясными, гибкими (но не слишком гибкий) наконец-то можно сделать спецификации зависимостей.
Простой пример продемонстрирует, как Semantic Versioning может создать зависимость черт дело в прошлом. Рассмотрим библиотеку под названием Firetruck. Это требует Семантически версионный пакет под названием «Ladder». В то время, когда пожарная машина создан, Ladder находится в версии 3.1.0. Поскольку Firetruck использует некоторые функции который был впервые представлен в версии 3.1.0, вы можете смело указывать Ladder зависимость больше или равна 3.1.0, но меньше 4.0.0. Теперь, когда Ladder версии 3. 1.1 и 3.2.0 стали доступны, вы можете выпустить их на свой систему управления пакетами и знать, что они будут совместимы с существующими зависимое ПО.
Как ответственный разработчик вы, конечно же, захотите проверить, обновления пакетов функционируют, как рекламируется. Реальный мир — грязное место; мы ничего не можем с этим поделать, но будьте бдительны. Что вы можете сделать, так это позволить Семантическое управление версиями предоставляет вам разумный способ выпуска и обновления пакетов без необходимости запускать новые версии зависимых пакетов, экономя ваше время и хлопоты.
Если все это звучит желательно, все, что вам нужно сделать, чтобы начать использовать Semantic Управление версиями — это объявить, что вы делаете это, а затем следовать правилам. Связь на этот веб-сайт из вашего README, чтобы другие знали правила и могли извлечь из них пользу. их.
Часто задаваемые вопросы
Что делать с изменениями на начальной стадии разработки 0.y.z?
Самое простое, что можно сделать, это начать первоначальную версию разработки с 0. 1.0. а затем увеличивать младшую версию для каждого последующего выпуска.
Как узнать, когда будет выпущена версия 1.0.0?
Если ваше программное обеспечение используется в производстве, возможно, оно уже 1.0.0. Если у вас есть стабильный API, от которого зависят пользователи, вам следует быть 1.0.0. Если вы сильно беспокоитесь об обратной совместимости, вам следует вероятно уже будет 1.0.0.
Не препятствует ли это быстрой разработке и быстрой итерации?
Нулевая основная версия предназначена для быстрой разработки. Если вы меняете API каждый день вы должны быть либо еще в версии 0.y.z либо на отдельном ветка разработки работает над следующей основной версией.
Если даже мельчайшие несовместимые с предыдущими изменениями общедоступный API потребуют обновления основной версии, не слишком ли быстро я окажусь на версии 42.0.0?
Это вопрос ответственного развития и предвидения. Несовместимо изменения не следует легкомысленно вносить в программное обеспечение, имеющее много зависимый код. Затраты на обновление могут быть значительными. Необходимость сбрасывать основные версии для выпуска несовместимых изменений означает, что вы продумайте влияние ваших изменений и оцените соотношение затрат и выгод вовлеченный.
Документировать весь общедоступный API слишком сложно!
Вы, как профессиональный разработчик, несете ответственность за надлежащее документирование программное обеспечение, предназначенное для использования другими лицами. Управление сложностью программного обеспечения — это Чрезвычайно важная часть поддержания эффективности проекта, и это трудно сделать, если никто не знает, как использовать ваше программное обеспечение или какие методы безопасно вызывать. В в долгосрочной перспективе, семантическое управление версиями и настойчивость в четко определенной общедоступной API может обеспечить бесперебойную работу всех и каждого.
Что делать, если я случайно выпущу обратно несовместимое изменение в качестве второстепенной версии?
Как только вы поймете, что нарушили спецификацию Semantic Versioning, исправьте проблему и выпустить новую минорную версию, которая исправляет проблему и восстанавливает обратную совместимость. Даже при этом обстоятельстве недопустимо модифицировать версионные релизы. Если это уместно, задокументируйте проблемную версию и сообщите своим пользователям о проблеме, чтобы они знают об оскорбительной версии.
Что делать, если я обновляю собственные зависимости, не меняя общедоступный API?
Это будет считаться совместимым, поскольку не влияет на общедоступный API. Программное обеспечение, которое явно зависит от тех же зависимостей, что и ваш пакет должны иметь свои собственные спецификации зависимостей, и автор заметит любые конфликты. Определение того, является ли изменение уровнем исправления или второстепенным уровнем модификация зависит от того, обновили ли вы свои зависимости, чтобы исправить ошибка или ввести новую функциональность. Обычно мы ожидаем дополнительный код для последнего случая, и в этом случае это, очевидно, незначительное повышение уровня.
Что делать, если я непреднамеренно изменю общедоступный API таким образом, что это не будет соответствовать изменению номера версии (т.
е. код неправильно вводит серьезное критическое изменение в выпуск исправления)?Принимайте во внимание здравый смысл. Если у вас огромная аудитория, которая будет резко воздействовать, изменив поведение обратно на то, что предполагал общедоступный API, а затем может быть лучше выполнить выпуск основной версии, даже если исправление может строго считать выпуском исправления. Помните, что семантическое управление версиями — это все о передаче смысла тем, как меняется номер версии. Если эти изменения важны для ваших пользователей, используйте номер версии, чтобы сообщить им.
Как поступить с устаревшей функциональностью?
Прекращение поддержки существующих функций является нормальной частью разработки программного обеспечения и часто требуется для продвижения вперед. Когда вы осуждаете часть своего общедоступный API, вы должны сделать две вещи: (1) обновить документацию, чтобы разрешить пользователи узнают об изменении, (2) выпустить новый второстепенный выпуск с устаревшим на месте. Прежде чем полностью удалить функциональность в новом основном выпуске должен быть хотя бы один второстепенный выпуск, содержащий устаревание, поэтому чтобы пользователи могли плавно перейти на новый API.
Есть ли в SemVer ограничение на размер строки версии?
Нет, но будьте рассудительны. Строка версии из 255 символов, вероятно, излишняя, например. Кроме того, определенные системы могут налагать собственные ограничения на размер Струна.
Является ли «v1.2.3» семантической версией?
Нет, «v1.2.3» не является семантической версией. Однако префикс семантической версии
с «v» — это обычный способ (на английском языке) указать, что это номер версии.
Сокращение «версия» как «v» часто встречается при управлении версиями. Пример:
9(?P<старший>0|[1-9]\d*)\.(?P<второстепенный>0|[1-9]\d*)\.(?P<патч>0|[1-9 ]\d*)(?:-(?P И один с пронумерованными группами захвата вместо этого (таким образом, cg1 = основной, cg2 = второстепенный,
cg3 = исправление, cg4 = предварительная версия и cg5 = метаданные сборки), совместимые
с ECMA Script (JavaScript), PCRE (Perl-совместимые регулярные выражения,
то есть Perl, PHP и R), Python и Go. 9(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0| [1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d* |\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\ .[0-9a-zA-Z-]+)*))?$ Спецификация Semantic Versioning первоначально была написана Томом
Престон-Вернер, изобретатель Gravatar и
соучредитель GitHub. Если вы хотите оставить отзыв, пожалуйста, откройте вопрос на
Гитхаб. Creative Commons ― CC BY 3.0 Специальность и второстепенность не могут быть выбраны из одной и той же академической программы. Сюда входят основные направления, предлагаемые в рамках той же академической программы . Пожалуйста, ознакомьтесь с требованиями конкретных специальностей и специальностей, которые вы рассматриваете. Как правило, SAS не налагает ограничений на выбор доступных основных и дополнительных программ; однако некоторые комбинации запрещены: Математика, Актуарные (640L) специальности не могут быть основными или второстепенными в области математики (640). Специальности по планированию и государственной политике (762) не могут объявлять урбанистику (975), государственная политика (833) и городское планирование и проектирование (971) несовершеннолетние. Кроме того, специальности «Планирование и государственная политика» (762) не могут дублировать специальности «Государственная политика» (833) и «Городское планирование и проектирование» (971). О
Лицензия
Основные/дополнительные ограничения
Науки о Земле и планетах (460), основные или второстепенные предметы не могут быть второстепенными в области астробиологии (101). Африканские, ближневосточные и южноазиатские языки и литература (AMESALL) (013) основные и второстепенные могут быть не второстепенными по африканским языкам (013A), арабскому (074), хинди (505), персидскому (723), турецкому (973) ), или суахили (956). Антропология 070 не может быть объединена с Культурной Антропологией 070C или Эволюционной Антропологией 071 в виде двойного основного, двойного второстепенного или комбинации основного/минорного. Культурная антропология 070C и Эволюционная антропология 071 не могут быть объединены как двойной мажор или двойной минор, но могут быть объединены как комбинация мажор/минор. Архитектурные исследования 076 второстепенных предметов нельзя сочетать с историей искусств 082 в виде комбинации мажор/минор или двойной минор. История искусств 082 не может быть объединена с архитектурными исследованиями 076 в виде мажорной/минорной, двойной минорной комбинации. Астробиология 101 несовершеннолетний не может быть основным или второстепенным в науках о Земле и планетах 460. Специальности по астрофизике 105 не могут быть второстепенными по физике 750 или астрономии 100. Биологические науки 119, Биоматематика 122, Клеточная биология и неврология 146, Упражнения 377, Генетика 447, Молекулярная биология и биохимия 694, Биохимия 115 и/или Микробиология 680 не могут быть объединены как двойные основные или как основные/второстепенные комбинации. Несовершеннолетние лица, занимающиеся бизнес-администрированием, не могут заниматься двойной комбинацией несовершеннолетних с предпринимательством. Творческое письмо 351 несовершеннолетний, который является английским основным или несовершеннолетним 350, не может использовать курсы творческого письма, чтобы соответствовать основным/несовершеннолетним требованиям английского языка. Уголовное правосудие 202 специальности не могут быть второстепенными в области криминологии 204 (начало весны 2014 г.). Специалисты по уголовному правосудию 202 не могут использовать криминологию 920:222 по отношению к младшему курсу социологии 920. Экономика 220 специальностей не могут быть второстепенными в области количественной экономики 221 и экономики окружающей среды и экономики бизнеса 373. Английский язык 350 специальностей и несовершеннолетних, которые являются несовершеннолетними по творческому письму, не могут посещать занятия по творческому письму, чтобы соответствовать основным/несовершеннолетним требованиям английского языка. Несовершеннолетние предприниматели не могут претендовать на двойную несовершеннолетнюю комбинацию с бизнес-администрированием. Экологические исследования 381 специальность может быть заявлена только как вторая специальность. Правительство и бизнес 793 несовершеннолетние не могут иметь высшее или двойное второстепенное значение в политических науках 790 или истории/политологии 514. История 510 специальностей не может быть второстепенной по истории – право и история 518 или история – STEM в обществе 519несовершеннолетние. История/Французский 513 специальностей может не быть второстепенным по истории 510, истории – право и история 518, истории – STEM в обществе 519 или французскому языку 420. История/Политология 514 специальностей не может также быть основным или второстепенным по истории 510, истории – право и история 518, истории – STEM в обществе 519, политологии 790 или правительству и бизнесу 793. Еврейские исследования 563 специальности не могут быть второстепенными по языку и культуре древнего Израиля 583 или современному ивриту 503. Музыка (700) несовершеннолетние не могут дублировать минор в музыкальных технологиях (679). Предметы физики (750) могут быть второстепенными в астрономии 100, но не могут учитываться 01:750:341, 342, 343 или 344 в соответствии с основными требованиями по физике. Политология (790) не может быть основным или двойным второстепенным по истории/политологии (514) или правительству и бизнесу (793) несовершеннолетние.