semantic-release无法识别集成前旧标签 如何设置发布起始版本
问题结论
支持,不需要单独设置所谓的“起始标签”。出现从v1.0.0-eng.1开始生成版本的问题,核心原因是semantic-release没有正确扫描识别到仓库里已有的历史标签,只要调整配置让它能正常读取、匹配现有标签,就会自动基于最新的历史版本接续生成新版本。
问题根因
semantic-release判断历史版本的逻辑是扫描本地仓库所有符合配置格式的git标签,按语义化版本规则排序后取最新值作为上一个版本。你遇到的问题通常由两个原因导致:
- CI流水线默认使用浅克隆,没有拉取全量git历史和所有标签,semantic-release读不到历史标签,就会默认从初始版本开始生成
- 配置的标签匹配规则、预发布通道设置和现有标签格式不匹配,导致已有的
vX.Y.Z-eng.N格式标签被过滤掉
解决步骤
- 第一步:修改CI配置,关闭浅克隆
如果使用GitLab CI,在执行semantic-release的job里添加变量GIT_DEPTH: 0,保证流水线拉取全量提交记录和所有标签;其他CI工具对应找到关闭浅克隆、拉取全量标签的配置项即可。 - 第二步:对齐semantic-release配置和现有标签规则
在项目的semantic-release配置文件(.releaserc/release.config.js)里做如下调整,保证配置和现有的v<版本号>-eng.<序号>标签格式匹配:// release.config.js 示例配置 module.exports = { branches: [ // 替换为实际的发布分支名,比如main/release等 { name: "release", prerelease: "eng" // 声明该分支产出的是eng通道的预发布版本 } ], // 标签匹配格式,${version}会自动匹配完整语义化版本号(包含-eng.x后缀) tagFormat: "v${version}", plugins: [ // 保留原有使用的插件列表即可 "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/gitlab" ] } - 第三步:验证配置生效
本地拉取全量代码和所有标签后,执行npx semantic-release --dry-run,查看运行日志中识别到的last release版本,如果显示为仓库最新的v3.5.4-eng.1,说明配置正常,后续发布就会基于这个版本按commit信息自动递增版本号。
注:当前仓库里的
v3.4.1-eng.1这类标签完全符合语义化版本规范,不需要额外做标签重命名或者特殊版本映射,只要能被semantic-release正常扫描到就可以被识别。
内容的提问来源于stack exchange,提问作者El Mehdi II
相关产品推荐
相关产品推荐

