如何通过Azure DevOps REST API获取master分支最新标签后的所有提交
获取Azure DevOps中master分支最新标签后的所有提交
方案1:通过Azure DevOps REST API实现自动筛选
Azure DevOps REST API没有直接通过标签筛选提交的参数,但可以分三步实现:先获取仓库最新标签,再拿到该标签对应的提交哈希,最后用提交哈希作为起始条件筛选后续提交。
完整脚本
$AzureDevOpsPAT = "你的PAT值" $OrganizationName = "组织名" $GitProject = "项目名" $RepositoryId = "02cu3246-0000-4863-9d19-5d1ajs5e6979" # 构建认证头 $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) } # 1. 获取仓库所有标签,按创建时间倒序取最新的一个 $uriTags = "https://dev.azure.com/$($OrganizationName)/$($GitProject)/_apis/git/repositories/$($RepositoryId)/refs?filter=tags&api-version=7.0" $tagsResponse = Invoke-RestMethod -Method Get -Uri $uriTags -Headers $AzureDevOpsAuthenicationHeader $latestTag = $tagsResponse.value | Sort-Object -Property createdDate -Descending | Select-Object -First 1 # 2. 获取该标签对应的提交详情,提取提交哈希 $tagCommitUri = "https://dev.azure.com/$($OrganizationName)/$($GitProject)/_apis/git/repositories/$($RepositoryId)/commits/$($latestTag.objectId)?api-version=7.0" $tagCommit = Invoke-RestMethod -Method Get -Uri $tagCommitUri -Headers $AzureDevOpsAuthenicationHeader $latestTagCommitId = $tagCommit.commitId # 3. 调用提交接口,筛选master分支中该提交之后的所有提交 $uriCommits = "https://dev.azure.com/$($OrganizationName)/$($GitProject)/_apis/git/repositories/$($RepositoryId)/commits?api-version=7.0" $Body = @{ "searchCriteria.includeWorkItems" = "true" "searchCriteria.itemVersion.version" = "master" "searchCriteria.fromCommitId" = $latestTagCommitId } $Params = @{ Method = "Get" Uri = $uriCommits Headers = $AzureDevOpsAuthenicationHeader Body = $Body } $response = Invoke-RestMethod @Params # 筛选关联工作项的提交并输出 $CommitIDsInfo = $response.value | Where-Object{$_.workitems -ne $null} | Select-Object comment, commitid, workitems $WorkItems = $CommitIDsInfo | ConvertTo-Json -Depth 100 Write-Host $WorkItems
方案2:用Git命令获取标签日期适配原有脚本
如果依赖本地Git环境,可通过Git命令拿到最新标签的提交日期,再替换原有脚本的日期参数。
步骤1:同步仓库代码
git clone https://$AzureDevOpsPAT@dev.azure.com/$OrganizationName/$GitProject/_git/[仓库名] cd [仓库名] git checkout master git pull
步骤2:获取最新标签的格式化日期
# 获取最新标签名称 $latestTagName = git describe --abbrev=0 --tags # 获取标签对应提交的日期,转换为Azure API要求的格式 $tagCommitDate = git log -1 --format=%ai $latestTagName $formattedDate = [DateTime]$tagCommitDate | Get-Date -Format "MM/dd/yyyy HH:mm:ss tt"
步骤3:替换原有脚本的日期参数
把原有脚本中的searchCriteria.fromDate替换为$formattedDate即可:
$Body = @{ "searchCriteria.includeWorkItems" = "true" "searchCriteria.itemVersion.version" = "master" "searchCriteria.fromDate" = $formattedDate }
注意事项
- 确保你的PAT拥有代码读取权限(Code Read)。
- 若仓库无任何标签,方案1会报错,需添加空值判断逻辑。
- 方案2要求本地安装Git,且仓库已同步最新代码。
内容的提问来源于stack exchange,提问作者Fylix
相关产品推荐
相关产品推荐

