如何用Git获取符合正式SemVer规范的最新生产版本标签
获取Git中最新的正式SemVer生产版标签
问题场景
你仓库里有一堆带预发布后缀的标签(比如1.1.1-dev.2、1.1.2-rc.0),想要拿到实际存在的、符合SemVer规范的最新正式版标签——比如当前代码在1.1.2-rc.0标签时,你要的是1.1.1,而不是截取出来的不存在的1.1.2。之前用git describe --abbrev=0 | awk -F - '{print $1}'会得到不存在的版本,完全没用。
可行解决方案
方案1:直接获取仓库内所有正式标签的最新版
这条命令会筛选出所有不带预发布后缀的正式标签,按版本号排序后取最新的:
git tag -l '*.*.*' | grep -v '-' | sort -V | tail -n 1
各部分作用:
git tag -l '*.*.*':列出所有符合x.y.z格式的标签grep -v '-':过滤掉带-的预发布标签(正式SemVer版本没有后缀)sort -V:按版本号自然排序(避免字符串排序导致1.10排在1.9前面的问题)tail -n 1:输出最后一个,也就是最新的正式标签
方案2:基于当前提交找最近的正式标签
如果需要针对当前所在的提交,找到它之前最近的正式版标签(比如在1.1.2-rc.0分支时找1.1.1),用这条命令:
git describe --tags --abbrev=0 --match '*.*.*' --exclude '*rc*' --exclude '*dev*'
各部分作用:
--match '*.*.*':只匹配x.y.z格式的标签--exclude '*rc*'/--exclude '*dev*':排除所有带rc(候选版)、dev(开发版)的预发布标签--abbrev=0:只返回完整标签名,不带提交哈希后缀
为什么之前的命令失效?
git describe --abbrev=0会找到当前提交最近的标签(也就是1.1.2-rc.0),然后用awk截取-前面的1.1.2,但这个版本根本没有对应的正式标签,所以完全不符合需求。
内容的提问来源于stack exchange,提问作者yuksi
相关产品推荐
相关产品推荐

