Как определить, почему GitVersion выбрала конкретную базовую версию?

Я использую GitVersion (версия 3.5.3, если это имеет значение) и получаю неожиданные результаты; в частности, созданная версия имеет непредвиденную часть счетчика коммитов. Глядя на журнал, я вижу, что количество коммитов рассчитывается правильно, но базовая версия, используемая GitVersion, неверна (или, по крайней мере, не такая, как я думал).

Однако файл журнала для GitVersion менее чем полезен, он просто перечисляет ряд тегов, затем длинный список баз слияния, а в конце просто сообщает, какую базовую версию он решил использовать.

Может ли GitVersion как-то сообщить мне, почему он выбрал именно эту базовую версию?


person user145400    schedule 13.12.2016    source источник
comment
Не могли бы вы показать результат, который вы видите? Или это в публичном репо?   -  person Gary Ewan Park    schedule 15.12.2016
comment
@GaryEwanPark Это частное хранилище. Сейчас я просматриваю исходный код GitVersion, чтобы понять его решение.   -  person user145400    schedule 16.12.2016


Ответы (1)


Я не уверен, вы уже проверили или нет; но объясняется, как они вычисляют базовую версию, а также новые версии в их документация

ОБНОВЛЕНИЕ: Добавлена ​​основная информация из документации.

Архитектура

GitVersion имеет три отдельных шага для расчета версий в версии 3.0.

  • Если текущая фиксация помечена, используется тег и добавляются метаданные сборки (исключая количество коммитов). Два других шага не будут выполняться
  • Набор стратегий оценивается для выбора базовой версии и некоторых метаданных об этой версии. Эти стратегии включают HighestReachableTag, NextVersionInConfig, MergedBranchWithVersion, VersionInBranchName и т. д.
  • Выбирается самая высокая базовая версия, с использованием этой базовой версии рассчитывается новая версия.

Визуально это выглядит примерно так: введите здесь описание изображения

Стратегии базовой версии

  • HighestTagBaseVersionStrategy — находит самый высокий достижимый тег из текущей ветки.
  • VersionInBranchBaseVersionStrategy — извлекает информацию о версии из имени ветки. например, релиз/3.0.0 найдет 3.0.0
  • ConfigNextVersionBaseVersionStrategy — возвращает версию из файла GitVersion.yaml.
  • MergeMessageBaseVersionStrategy — находит номера версий из сообщений слияния. например. Объединение 'release/3.0.0' с 'master' возвращает 3.0.0
  • FallbackBaseVersionStrategy — всегда возвращает 0.1.0 для новых репозиториев.

Каждая стратегия должна возвращать экземпляр BaseVersion со следующими свойствами:

  • Источник — описание источника. например, `Объединить сообщение 'Объединить 'выпуск/3.0.0' в 'мастер''
  • ShouldIncrement — для некоторых стратегий версия должна увеличиваться, а для других — нет. например, ConfigNextVersionBaseVersionStrategy возвращает false, HighestTagBaseVersionStrategy возвращает true
  • SemanticVersion — SemVer стратегии базовой версии.
  • BaseVersionSource — Sha исходного кода. Коммиты будут засчитываться от этого Ша. Может быть нулевым (например, ConfigNextVersionBaseVersionStrategy возвращает нуль)
  • BranchNameOverride. Когда в конфигурации тега используется useBranchName или {BranchName}, это позволяет изменить имя ветки на базовую версию. VersionInBranchBaseVersionStrategy использует это, чтобы удалить все, что находится перед первым - или /. Таким образом, foo оценивается как foo. Если вы сомневаетесь, просто используйте null
person nzrytmn    schedule 31.01.2017
comment
Хотя ваш ответ на 100% правильный, он также может стать на 100% бесполезным, если эта ссылка будет перемещена, изменена, объединена с другой или просто исчезнет основной сайт... :-( Поэтому, пожалуйста, отредактируйте свой ответ и скопируйте соответствующие шаги из ссылки в свой ответ, тем самым гарантируя ваш ответ на 100% времени жизни этот сайт! ;-) Вы всегда можете оставить ссылку внизу вашего ответа в качестве источника для вашего материала... - person Donald Duck; 31.01.2017
comment
@DonaldDuck спасибо за информацию, вы совершенно правы :) - person nzrytmn; 06.02.2017
comment
@nzrytmn, а как именно выбирается стратегия базовой версии? Нужно ли указывать это в конфиге? - person Konstantin Ershov; 27.05.2021