使用 Azure DevOps api 从标记中获取分支名称

Indrajeet Gour

如果我有与之关联的标签,有人可以帮助我获取实际的分支名称吗?

在我的情况下,Azure DevOps API 是最好的。提前致谢。

到目前为止,我得到的 API 为特别的 repo 提供了所有标签,但这并不能解决我的问题。

https://dev.azure.com/{{organization}}/{{project}}/_apis/git/repositories/{{repository_id}}/refs?filter=tags/&api-version=6.0

但它没有给我任何与之相关的分支信息。

刘维托

没有这样的 REST API 可以通过标签或提交来获取分支名称。在 Azure DevOps 中,Tag 是根据 commit id 创建的,一个 commit 或 tag 可以属于多个分支。让我们用下图来说明:

A---B---E---F master
     \     /
      C---D   dev

这是一个带有 master 和 dev 分支的分支结构。然后dev分支用commit F合并到master,如果想根据commit D得到分支名,会得到两个分支名。Commit D 属于两个分支:dev(第一个父级)和 master(第二个父级)。

我们可以通过条件和多个 REST API 获取分支名称,也可以通过 git cmd 获取分支名称。

一个列出所有标签并获取objectId.

GET https://dev.azure.com/{Org name}/{Project name}/_apis/git/repositories/{repo ID}/refs?filter=tags/&api-version=6.0

通过 objectId获取标签信息和提交 ID

注意:该字段taggedObject.objectId是提交 ID

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/annotatedtags/{objectId}?api-version=6.0-preview.1

解决方法 1

现在我们可以获取提交详细信息并获取包含给定提交的分支名称,我们可以使用 git 命令:

git branch --contains <commit>

解决方法 2

我们可以通过这个 API列出一个分支上的所有提交信息

GET https://dev.azure.com/{Org name}/_apis/git/repositories/{repositoryId}/commits?searchCriteria.itemVersion.version={barnch name}&api-version=6.0

现在,我们得到包含标签和分支上所有提交 ID 的提交 ID,添加if{}eq()检查它,如果它返回 True,我们可以知道这个分支包含标签

更新1

我的测试仓库包含分支maintest01,分支main包含标签Tag01,分支test01包含标签Tag01tag02

电源外壳脚本:

$ListAllTagsURL="https://dev.azure.com/{Org name}/{Project name}/_apis/git/repositories/{Repo ID}/refs?filter=tags/&api-version=6.0"
$PAT="{PAT}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))

$ListAllTags = Invoke-RestMethod -Uri $ListAllTagsURL -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get

#List all tags name
#write-host $ListAllTags.value.name
foreach($Tag in $ListAllTags.value){
    if($Tag.name -eq "{tag name such as refs/tags/Tag01}"){
        $objectId = $Tag.objectId
        $TagName = $Tag.name
    }
}

#Get tag details and commit ID
$TagURL="https://dev.azure.com/{Org name}/{Project name}/_apis/git/repositories/{Repo ID}/annotatedtags/$($objectId)?api-version=6.0-preview.1"
$TagInfo = Invoke-RestMethod -Uri $TagURL -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get
$TagCommitID = $TagInfo.taggedObject.objectId
#write-host $TagCommitID 


#List all branch
$url="https://dev.azure.com/{Org name}/{Project name}/_apis/git/repositories/{Repo ID}/refs?filter=heads&api-version=6.1-preview.1"
$BranchInfo = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get
foreach($Branch in $BranchInfo.value){
#write-host $Branch.name
$BranchName = $Branch.name.split("/",3)[-1]
#write-host $BranchName

#List all commit ID via Branch Name
$BranchDetailUrl="https://dev.azure.com/v-viliu/_apis/git/repositories/{Repo ID}/commits?searchCriteria.itemVersion.version=$($BranchName)&api-version=6.0"
$BranchDetailInfo = Invoke-RestMethod -Uri $BranchDetailUrl -Headers @{Authorization = "Basic {0}" -f $base64AuthInfo} -Method get
#write-host $BranchDetailInfo.value.commitId

foreach($CommitID in $BranchDetailInfo.value.commitId){
    If($CommitID -eq $TagCommitID){
        write-host $BranchName "Contain this tag" $TagName
    }

}

}

结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Azure DevOps REST Api如何获取分支的提交哈希?

使用 Azure DevOps REST Api 如何获取默认分支?

如何使用 REST API 在 Azure DevOps 中禁用分支策略?

如何在Azure DevOps中使用斜杠获取分支名称?

使用REST API获取与Azure Devops中的构建关联的更改

如何使用 rest api 在 Azure DevOps 中获取发布管道名称列表

如何使用 Azure DevOps Service API 跨分支创建 PR?

如何使用 azure DevOps api 在 azure DevOps 项目中查找所有板名称?

如何使用 Azure Devops Services Rest API 在 Azure Devops 中更新测试用例的“区域路径”

Azure DevOps使用API获取工作项通知

使用Rest API获取Azure DevOps构建的构建结果

使用Rest API从Azure Devops存储库获取文件

获取OAuth令牌以使用Azure DevOps API

使用 API 创建 Azure DevOps 项目时获取随机超时

如何使用Azure devops Rest Api获取最新标签?

使用 Rest API 在 Azure DevOps 中创建新用户

使用REST API批准Azure DevOps中的Yaml管道部署

如何使用Azure Devops API中的头像图像URL

如何使用 REST API 在 azure devops 中创建环境

如何使用Azure DevOps REST Api从Git存储库下载分支中的文件?

如何使用Python API在Azure DevOps中添加分支策略

获取 Azure Devops Pipeline 中分支的名称

Azure DevOps使用REST API调用GetItem

如何使用Azure Devops中的Azure Devops API在C#中使用父子关系创建/更新工作项

Azure DevOps REST Api:分支中是否存在 git commit?

使用REST API获取Azure DevOps中的所有组织

通过访问令牌,使用Azure DevOps中的REST API获取用户详细信息

如何通过API获取Azure Devops / TFS中特定BUILD中使用的变量

使用其REST API将Azure DevOps指标获取到Elatic搜索数据库中?