You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:15:32