Я нашел способ создания строки версии, совместимой с semver, из хранилища Mercurial с соответствующим тегом, используя hg log
с шаблоном.Это выглядит так:
hg log -r . --template "{latesttag('re:^[vV]\d+\.\d+\.\d+') % '{node}|{tag}.{distance}|{tag}{ifeq(distance, '1', '', '-build{distance}')}{ifeq(branch, 'default', '', '+{branch}')}'}"
Возвращает три вещи: идентификатор ревизии коммита, соответствующего шаблону тега, строку версии, совместимую с .NET System.Version
, и строку версии, совместимую с semver 2.0, с использованиемрасстояние тега в качестве предварительной информации, если оно больше 1 (то есть больше фактических фиксаций после пересмотра тега), и использование имени ветви в качестве метаданных сборки, если оно имеет любое значение, отличное от «по умолчанию» (например, «hotfix-JIRA-123»).
Я не против того, чтобы все это можно было отформатировать в одной команде hg log
, пока я смогу получить все значения для последующего форматирования.Это просто подливка со стороны Mercurial.
Однако единственный способ увидеть то же самое в git - это использовать несколько команд, например так:
REM Returns the tag, tag distance, and node ID "abbreviated" to 40 chars (i.e. not abbreviated, LOLZ)
git describe --tags --long --match "v*.*.*" --abbrev=40
REM Returns the branch name
git rev-parse --abbrev-ref HEAD
Если git describe
мог бы дополнительно вернуть имя ветки любым способом, что решило бы мою проблему, но на самом деле я не вижу ни одной команды в git, которая будет возвращать все эти значения, уже отфильтровав теговую ревизию, как это делают эти команды.
Я могу продолжать в том же духе, мне просто интересно, есть ли что-то, что я пропускаю.