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

如何通过编程方式从工作项中检索变更集?

获取关联特定工作项的变更集列表(可行方案)

这个需求完全可行,你之前用WIQL没成功是因为没用到工作项链接查询来关联变更集。以下是具体实现步骤:

核心思路

工作项与变更集(Git提交/TFVC变更集)通过ArtifactLink类型的关联链接绑定,你可以通过WIQL查询获取这些关联,再解析链接信息调用对应API获取变更集详情。

1. 用WIQL查询关联的变更集链接

使用WorkItemLinks查询类型,指定工作项ID和关联链接类型(Git用Fixed in Commit,TFVC用Fixed in Changeset):

SELECT [System.Id], [System.Title]
FROM WorkItemLinks
WHERE (
    [Source].[System.Id] = @WorkItemId
    AND [System.Links.LinkType] = 'Fixed in Commit'
)
ORDER BY [System.Id]
MODE (Recursive)

通过REST API执行该查询的请求示例:

POST https://dev.azure.com/{organization}/{project}/_apis/wit/wiql?api-version=7.1-preview.2
Content-Type: application/json

{
    "query": "SELECT [System.Id], [System.Title] FROM WorkItemLinks WHERE ([Source].[System.Id] = 1234 AND [System.Links.LinkType] = 'Fixed in Commit') ORDER BY [System.Id] MODE (Recursive)"
}

2. 解析关联链接并获取变更集详情

查询结果中,Target.Url是变更集的Artifact链接,格式如下:

  • Git提交:vstfs:///Git/Commit/{project-guid}/{repo-guid}/{commit-id}
  • TFVC变更集:vstfs:///VersionControl/Changeset/{changeset-id}

解析出ID后,调用对应API获取详情:

  • Git提交API:GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repo-id}/commits/{commit-id}?api-version=7.1-preview.1
  • TFVC变更集API:GET https://dev.azure.com/{organization}/{project}/_apis/tfvc/changesets/{changeset-id}?api-version=7.1-preview.1

3. 完整代码示例(C# + Azure DevOps SDK)

using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.TeamFoundation.SourceControl.WebApi;

var orgUrl = "https://dev.azure.com/your-organization";
var pat = "your-personal-access-token";
var targetWorkItemId = 1234;

// 初始化连接
var connection = new VssConnection(new Uri(orgUrl), new VssBasicCredential(string.Empty, pat));
var witClient = connection.GetClient<WorkItemTrackingHttpClient>();

// 执行WIQL查询
var wiql = new Wiql
{
    Query = $"SELECT [System.Id] FROM WorkItemLinks WHERE ([Source].[System.Id] = {targetWorkItemId} AND [System.Links.LinkType] = 'Fixed in Commit') MODE (Recursive)"
};
var queryResult = await witClient.QueryByWiqlAsync(wiql);

// 遍历关联链接并获取变更集详情
foreach (var link in queryResult.WorkItemRelations.Where(l => l.Target != null))
{
    var artifactUrl = link.Target.Url;
    var urlSegments = artifactUrl.Split('/');
    
    // 解析Git提交信息
    var commitId = urlSegments[^1];
    var repoId = urlSegments[^2];
    
    var gitClient = connection.GetClient<GitHttpClient>();
    var commit = await gitClient.GetCommitAsync(repoId, commitId);
    
    // 输出变更集信息
    Console.WriteLine($"提交ID: {commitId}");
    Console.WriteLine($"作者: {commit.Author.Name}");
    Console.WriteLine($"提交时间: {commit.Committer.Date:yyyy-MM-dd HH:mm:ss}");
    Console.WriteLine($"提交注释: {commit.Comment}");
    Console.WriteLine("------------------------");
}

注意事项

  • 确保你的Personal Access Token(PAT)拥有Work Item Read和Git Read(或TFVC Read)权限
  • 若工作项与变更集的关联类型不是Fixed in Commit,可替换为Associated with等其他类型,具体可在Azure DevOps的链接类型设置中查看

内容的提问来源于stack exchange,提问作者Luke Clark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:40:24