Контекст: я недавно узнал о семантическом версионировании и пытаюсь определить, как лучше всего использовать его практически для моих собственных проектов.
Учитывая, что semver учитывает основные изменения, незначительные изменения и исправления для управления версиями, когда фиксация не должна быть помечена обновленной версией? Мне кажется, что каждое изменение будет вписываться в одну из этих категорий, и поэтому каждое изменение должно быть версионным, но когда я смотрю на различные популярные проекты на GitHub, это не похоже на то, как все делается (просто смотреть на Дело в том, что крупные проекты имеют десятки тысяч коммитов, с сотнями тегов).
Ответы:
SemVer касается версий релизов , не совершает . Если ваша модель управления версиями требует, чтобы каждый коммит для мастера был релизом, то да, каждый коммит должен быть помечен в соответствии со степенью изменения.
Тем не менее, как правило, проекты разрабатывают в основном стабильный продукт на master и отмечают выпуски, которые они считают достойными поддержки. Когда они это сделают, они будут отмечать в соответствии со своей схемой управления версиями, которая не обязательно должна быть, в частности, SemVer.
источник
Номера версий присваиваются релизам. В общем, не каждый коммит должен быть релизом. На это есть несколько причин.
Во-первых, когда вы говорите, что «тестируете» каждый коммит, есть уровни тестирования. Запуск автоматизированного тестового набора на одной машине - это хорошо, но в сложном программном обеспечении он, вероятно, не уловит каждую проблему. Некоторые проблемы могут быть связаны с конкретным оборудованием или конфигурацией, некоторые могут быть связаны с субъективными соображениями, а не с требованиями, которые можно тестировать жестко.
Во-вторых, столкновение с номером основной версии должно быть редким действием. По сути, это означает, что все, что зависит от вашего программного обеспечения, необходимо проверить вручную, чтобы увидеть, зависит ли оно от каких-либо удаленных функций.
Следствием этого является то, что вы должны добавлять функции к своему «общедоступному API» только в полной (не альфа / бета) версии, если вы готовы поддерживать эти функции в их нынешнем виде в течение длительного времени.
В-третьих, полезно уменьшить количество широко используемых версий. Даже в стабильной ветке часто лучше собрать несколько исправлений вместе и сделать один выпуск, чем выпускать для каждого исправления.
источник
Кажется очевидным сказать, но: цель номеров версий состоит в том, чтобы вы могли легко определить, какую версию программного обеспечения кто-либо использует.
Если есть вероятность того, что кто-либо получит доступ к определенной итерации кода и не сможет легко определить уникальный идентификатор, тогда эта итерация должна иметь уникальный номер версии. Я вижу это как «первое правило». Как следствие, для разных версий явно нужны разные номера версий.
Однако в игру вступает больше:
Один из способов убедиться в этом заключается в увеличении номеров версий при каждом коммите, но обычно это не очень хорошая идея. Может потребоваться несколько коммитов / итераций, чтобы заставить работать относительно небольшое изменение, и внешний мир сбивает с толку, чтобы увидеть версию 0.0.1 -> 0.0.2 в результате большого количества накопленных изменений, тогда 0.0.2 -> 0.0 .56, потому что кто-то зафиксировал пробел, исправляет один файл за раз и ничего не меняет.
Насколько далеко зашло дело от «одной версии на полную версию» до «одной версии для каждой фиксации»: вы, другие пользователи и какие системы вы хотите использовать для заполнения пробелов.
Лично я привык работать над небольшими проектами и рад использовать git-хэши до версии, которую используют другие, и расширенной версии для каждой из них (независимо от того, как мало людей я ожидаю получить в свои руки). Однако в более крупных компаниях и более крупных проектах используется нечто за пределами семантических номеров версий, но с меньшей точностью, чем при каждом коммите, например нумерация кандидатов на выпуск. Это имеет свои преимущества, но добавляет сложности.
источник
Каждый пул-запрос, который объединяется с мастером, должен быть версионным.
Если это не должна быть новая версия (по крайней мере, патч), скорее всего, ее не следует объединять с мастером, потому что функция / исправление / и т. Д. Не завершена.
Однако, в зависимости от рабочего процесса вашей команды, вы все равно можете получить несколько коммитов для мастеринга без версии. Если в запросе на удаление есть несколько коммитов, которые не будут раздавлены (по моему мнению, они не должны), вы все равно можете получить 10 коммитов и только 1 новую версию.
источник