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

如何通过Azure DevOps API获取带文件夹路径标签间的提交列表?

解决带文件夹路径的注释标签提交对比问题

核心问题:带路径的标签名称未URL编码

当标签包含文件夹路径(如releases/v1.0)时,直接将原始名称传入API会导致斜杠被解析为URL路径的一部分,API无法识别完整的标签名称,因此返回空结果。

解决步骤1:对标签名称进行URL编码

在将标签名称添加到查询参数前,使用UrlEncode处理带路径的标签名,把特殊字符(如/)转义为URL安全格式:

修改代码中的参数添加逻辑:

string preiousVersionTag = "folder/tag 1";
string currentVersionTag = "folder/tag 2";

NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(string.Empty);
// 对带路径的标签名进行URL编码
queryString.Add("itemVersion.version", System.Web.HttpUtility.UrlEncode(preiousVersionTag));
queryString.Add("itemVersion.versionType", "tag");
queryString.Add("compareVersion.version", System.Web.HttpUtility.UrlEncode(currentVersionTag));
queryString.Add("compareVersion.versionType", "tag");
queryString.Add("includeWorkItems", "true");

关于标签ID导致404的问题

如果尝试使用标签ID,需注意以下两点:

  • 必须传入注释标签的对象ID:不是标签指向的提交ID,而是标签自身的Git对象ID。可以通过调用GET /_apis/git/repositories/{projectID}/tags?api-version=6.0获取所有标签的objectId字段。
  • versionType保持为tag:即使传入ID,也要指定versionType=tag,否则API会将ID识别为提交ID,导致找不到对应资源(404)。

示例:使用标签ID的参数设置

// 替换为实际的标签对象ID
string previousTagId = "abc123def456...";
string currentTagId = "ghi789jkl012...";

queryString.Add("itemVersion.version", previousTagId);
queryString.Add("itemVersion.versionType", "tag");
queryString.Add("compareVersion.version", currentTagId);
queryString.Add("compareVersion.versionType", "tag");

额外验证建议

  1. 手动在浏览器中构造编码后的API请求,确认能返回结果,排除代码逻辑外的问题。
  2. 检查标签是否为注释标签:轻量标签在API中的处理方式一致,但如果是注释标签,确保标签对象存在(可通过标签列表API验证)。

内容的提问来源于stack exchange,提问作者Annat Himmel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:15:17