Когда коммит не должен быть помечен версией?

30

Контекст: я недавно узнал о семантическом версионировании и пытаюсь определить, как лучше всего использовать его практически для моих собственных проектов.

Учитывая, что semver учитывает основные изменения, незначительные изменения и исправления для управления версиями, когда фиксация не должна быть помечена обновленной версией? Мне кажется, что каждое изменение будет вписываться в одну из этих категорий, и поэтому каждое изменение должно быть версионным, но когда я смотрю на различные популярные проекты на GitHub, это не похоже на то, как все делается (просто смотреть на Дело в том, что крупные проекты имеют десятки тысяч коммитов, с сотнями тегов).

VortixDev
источник
23
Является ли каждое обязательство освоить стабильный, проверенный, качественный выпуск в вашем проекте?
Алекс Рейкинг
1
@AlexReinking Каждый коммит тестируется, но я просто пытаюсь привыкнуть к общепринятым практикам с моими личными проектами, так что это только я работаю над ним, и поэтому в действительности не существует системы, кроме «внести изменения, протестировать» это сам, совершай это ».
VortixDev
Также обратите внимание, что теги могут быть изменены позже. Единственный надежный идентификатор коммита - это ключ хеша коммита.
Турбьерн Равн Андерсен
9
каждый коммит освоить ??? Вы никогда не должны посвятить себя мастеру. Каждое слияние с мастером звучит намного лучше.
xyious
2
Я думаю, @xyious ударяет ноготь по голове. Каждый коммит, который заканчивается на master, должен быть помечен версией, потому что каждый коммит на master должен быть слиянием релиза от Develop .
Би Джей Майерс

Ответы:

71

SemVer касается версий релизов , не совершает . Если ваша модель управления версиями требует, чтобы каждый коммит для мастера был релизом, то да, каждый коммит должен быть помечен в соответствии со степенью изменения.

Тем не менее, как правило, проекты разрабатывают в основном стабильный продукт на master и отмечают выпуски, которые они считают достойными поддержки. Когда они это сделают, они будут отмечать в соответствии со своей схемой управления версиями, которая не обязательно должна быть, в частности, SemVer.

Алекс Рейнинг
источник
5
SemVer в основном имеет смысл только для библиотек, где пользователь - это другие части кода, а не люди. В большинстве приложений, ориентированных на пользователя, нет никаких «критических» изменений, поскольку пользователь может автоматически адаптироваться к новой версии.
Qwertie
5
Я бы сказал, что версии командной строки приложений, ориентированных на пользователя, должны иметь семантическую версию, поскольку их флаги и выходные форматы могут вести себя по-разному. Немного серой области.
Алекс Рейкинг
5
@Qwertie Ожидания пользователей менее жесткие, чем ожидания программного обеспечения, но они все еще существуют. Я ОПРЕДЕЛЕННО использовал много программ, которые выпустили то, что я бы назвал «ломать» изменения в их интерфейсе или функциональности. Решение о том, что является основным или второстепенным выпуском, безусловно, более субъективно, чем с библиотеками, но это не обязательно является причиной, чтобы этого избежать.
Железный Гремлин
11
@Qwertie - отложить обновление. Сколько людей все еще используют старые основные версии Windows и Office?
Алекс Рейкинг
5
@Qwertie Им может быть интересно внимательно прочитать журнал изменений или документацию, чтобы они могли адаптировать способ использования системы для использования новых или измененных функций или найти обходные пути для удаленной функции. Это тот же самый случай, их использование программного обеспечения должно измениться, потому что программное обеспечение изменилось, поэтому вы должны сообщить им об этом изменении однозначно.
Железный Гремлин
11

Номера версий присваиваются релизам. В общем, не каждый коммит должен быть релизом. На это есть несколько причин.

Во-первых, когда вы говорите, что «тестируете» каждый коммит, есть уровни тестирования. Запуск автоматизированного тестового набора на одной машине - это хорошо, но в сложном программном обеспечении он, вероятно, не уловит каждую проблему. Некоторые проблемы могут быть связаны с конкретным оборудованием или конфигурацией, некоторые могут быть связаны с субъективными соображениями, а не с требованиями, которые можно тестировать жестко.

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

Следствием этого является то, что вы должны добавлять функции к своему «общедоступному API» только в полной (не альфа / бета) версии, если вы готовы поддерживать эти функции в их нынешнем виде в течение длительного времени.

В-третьих, полезно уменьшить количество широко используемых версий. Даже в стабильной ветке часто лучше собрать несколько исправлений вместе и сделать один выпуск, чем выпускать для каждого исправления.

Питер Грин
источник
2

Кажется очевидным сказать, но: цель номеров версий состоит в том, чтобы вы могли легко определить, какую версию программного обеспечения кто-либо использует.

Если есть вероятность того, что кто-либо получит доступ к определенной итерации кода и не сможет легко определить уникальный идентификатор, тогда эта итерация должна иметь уникальный номер версии. Я вижу это как «первое правило». Как следствие, для разных версий явно нужны разные номера версий.

Однако в игру вступает больше:

Один из способов убедиться в этом заключается в увеличении номеров версий при каждом коммите, но обычно это не очень хорошая идея. Может потребоваться несколько коммитов / итераций, чтобы заставить работать относительно небольшое изменение, и внешний мир сбивает с толку, чтобы увидеть версию 0.0.1 -> 0.0.2 в результате большого количества накопленных изменений, тогда 0.0.2 -> 0.0 .56, потому что кто-то зафиксировал пробел, исправляет один файл за раз и ничего не меняет.

Насколько далеко зашло дело от «одной версии на полную версию» до «одной версии для каждой фиксации»: вы, другие пользователи и какие системы вы хотите использовать для заполнения пробелов.

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

ANone
источник
0

Каждый пул-запрос, который объединяется с мастером, должен быть версионным.

Если это не должна быть новая версия (по крайней мере, патч), скорее всего, ее не следует объединять с мастером, потому что функция / исправление / и т. Д. Не завершена.

Однако, в зависимости от рабочего процесса вашей команды, вы все равно можете получить несколько коммитов для мастеринга без версии. Если в запросе на удаление есть несколько коммитов, которые не будут раздавлены (по моему мнению, они не должны), вы все равно можете получить 10 коммитов и только 1 новую версию.

xyious
источник