如何通过Rest API提取Azure DevOps仓库中的最新标签?
解决Azure Git仓库最新标签获取问题
你当前的问题是用sort_by(.name)按字符串字典序排序版本号,导致无法正确识别最新版本(比如v1.10会被排在v1.2前面)。以下是两种可靠的解决方法:
方法一:用JQ按版本号语义排序(纯API方式)
如果你的标签命名是标准版本格式(如v1.2.3或1.2.3),可以修改JQ逻辑,将版本号拆分为数字数组后排序:
tags_response=$(curl -s -u ":$pat" \ "https://dev.azure.com/$organization/$project/_apis/git/repositories/$repo_id/refs?filter=tags&api-version=7.1-preview.1") # 提取最新标签(针对v开头的版本号,如v1.2.3) latest_tag=$(echo $tags_response | jq -r ' .value | map({ name: .name, version: (.name | ltrimstr("v") | split(".") | map(tonumber? // .)) }) | sort_by(.version) | last.name ')
- 说明:
tonumber? // .用来兼容带预发布后缀的版本(如v1.2.3-beta),避免转换失败报错;如果你的标签没有v前缀,删除ltrimstr("v")即可。
方法二:用Git命令直接获取(更简单可靠)
利用git ls-remote命令直接获取并排序标签,无需处理API返回的JSON,兼容性更强:
# 替换为你的仓库名称(不是repo_id) repo_name="your-repo-name" latest_tag=$(git ls-remote --tags --refs https://$pat@dev.azure.com/$organization/$project/_git/$repo_name | sort -V | tail -n1 | awk '{print $2}' | sed 's/refs\/tags\///')
- 说明:
sort -V会按版本号的语义规则排序,自动处理v1.10大于v1.2的情况;--refs参数会过滤掉带^{}的重复标签。
内容的提问来源于stack exchange,提问作者cris7ronaldo
相关产品推荐
相关产品推荐

