Кажется очевидным сказать, но: цель номеров версий состоит в том, чтобы вы могли легко определить, какую версию программного обеспечения кто-либо использует.
Если есть вероятность того, что кто-либо получит доступ к определенной итерации кода и не сможет легко определить уникальный идентификатор, тогда эта итерация должна иметь уникальный номер версии. Я вижу это как «первое правило». Как следствие, для разных версий явно нужны разные номера версий.
Однако в игру вступает больше:
Один из способов убедиться в этом заключается в увеличении номеров версий при каждом коммите, но обычно это не очень хорошая идея. Может потребоваться несколько коммитов / итераций, чтобы заставить работать относительно небольшое изменение, и внешний мир сбивает с толку, чтобы увидеть версию 0.0.1 -> 0.0.2 в результате большого количества накопленных изменений, тогда 0.0.2 -> 0.0 .56, потому что кто-то зафиксировал пробел, исправляет один файл за раз и ничего не меняет.
Насколько далеко зашло дело от «одной версии на полную версию» до «одной версии для каждой фиксации»: вы, другие пользователи и какие системы вы хотите использовать для заполнения пробелов.
Лично я привык работать над небольшими проектами и рад использовать git-хэши до версии, которую используют другие, и расширенной версии для каждой из них (независимо от того, как мало людей я ожидаю получить в свои руки). Однако в более крупных компаниях и более крупных проектах используется нечто за пределами семантических номеров версий, но с меньшей точностью, чем при каждом коммите, например нумерация кандидатов на выпуск. Это имеет свои преимущества, но добавляет сложности.