GitVersion与NuGet预发布版本排序与创建顺序不符求助
核心问题:对NuGet的版本排序规则存在认知偏差
你遇到的版本排序现象完全符合NuGet的官方设计逻辑,并非工具异常:
- NuGet的包列表排序完全不参考包的实际上传时间、构建创建先后顺序,100%遵循语义化版本2.0(SemVer 2.0)的版本对比规则
- 同一基础版本号(主版本.次版本.修订号部分完全一致)的两个包,会直接对比短横线后的预发布标签部分,按照规则逐位判断版本高低
你提到的两个版本的实际对比过程:
- 两个包的基础版本都是
1.0.0,直接对比预发布段:alpha.2vsbranch1- 两个预发布段拆分成的第一个标识符都是字符串,按照ASCII字典序逐位对比:
alpha的首字符是a(ASCII码97),branch1的首字符是b(ASCII码98)- 字典序中
a<b,因此NuGet会判定1.0.0-alpha.2的版本优先级低于1.0.0-branch1,将后者排在更靠前的“更新版本”位置
为什么现有GitVersion配置没有解决问题
你当前仅使用GitVersion.NugetVersion作为版本号来源的默认配置下,feature分支会直接将分支名拼接为预发布标签的第一段,生成的1.0.0-branch1标签本身就存在字典序高于alpha系列标签的问题:
- 这种默认生成规则没有区分不同分支的版本优先级层级,自然会出现分支版本压过develop分支alpha预发布版本的排序问题,就算临时调整其他版本参数项,只要预发布标签的首段是
branch1,这个排序问题就不会消失
可落地的调整方案
- 调整GitVersion的分支版本映射规则,将feature分支的预发布标签纳入alpha的命名空间下,比如让feature分支生成
1.0.0-alpha.feature.branch1格式的版本号,这类标签的字典序和同版本的alpha.2标签处于同一对比维度,不会出现跨层级的排序混乱 - 如果需要让feature分支的版本优先级明确低于develop分支的alpha版本,可以在feature分支的预发布标签最前面加一个低优先级的纯数字段,比如生成
1.0.0-0.branch1。按照SemVer规则,纯数字标识符的优先级永远低于字符串标识符,因此这类版本会自动排在所有alpha开头的预发布版本后面 - 调整完成后,可以用标准SemVer对比逻辑预先校验版本顺序,不需要反复上传包到Artifacts反复测试
内容的提问来源于stack exchange,提问作者Stuart Hemming
相关产品推荐
相关产品推荐

