Nei*_*ell 5 versioning git mercurial
我找到了一种使用hg log模板从适当标记的 Mercurial 存储库生成符合 semver 的版本字符串的方法。它看起来像这样:
hg log -r . --template "{latesttag('re:^[vV]\d+\.\d+\.\d+') % '{node}|{tag}.{distance}|{tag}{ifeq(distance, '1', '', '-build{distance}')}{ifeq(branch, 'default', '', '+{branch}')}'}"
Run Code Online (Sandbox Code Playgroud)
这将返回三件事,与标签模式匹配的提交的修订 ID、符合 .NETSystem.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
Run Code Online (Sandbox Code Playgroud)
如果git describe可以另外以任何方式返回分支名称,那将解决我的问题,但我实际上看不到 git 中的任何一个将返回所有这些值的命令,已经像这些命令一样过滤到标记的修订版。
我可以照原样继续下去,我只是想知道是否有什么我遗漏的地方。