如何通过Pull RequestId获取Azure DevOps中的文件变更
获取Azure DevOps Pull Request的整体文件变更(排除单个提交变更)
你可以通过以下两种方式直接获取Pull Request的最终文件变更集,无需遍历或包含PR内的单个提交记录变更:
一、使用Azure DevOps REST API
调用专门的Pull Request文件端点,返回的是PR合并前后的整体文件差异,而非每个提交的单独变更:
请求示例
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}/files?api-version=7.1-preview.1
参数说明
{organization}:Azure DevOps组织名称{project}:项目名称或ID{repositoryId}:代码仓库的ID或名称{pullRequestId}:目标Pull Request的IDapi-version:推荐使用7.1-preview.1及以上版本(稳定版也可兼容)
返回内容
响应会包含PR中所有变更文件的详细信息,核心字段包括:
path:文件路径changeType:变更类型(如add、edit、delete等)originalPath:文件原始路径(若有重命名)url:文件差异的预览链接
二、使用.NET客户端库(Microsoft.TeamFoundationServer.Client)
通过官方NuGet包Microsoft.TeamFoundationServer.Client提供的GitHttpClient类,直接调用GetPullRequestFilesAsync方法获取PR的整体文件变更:
代码示例
using Microsoft.VisualStudio.Services.Client; using Microsoft.TeamFoundation.SourceControl.WebApi; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 配置Azure DevOps连接信息 var orgUri = new Uri("https://dev.azure.com/your-organization"); var patToken = "your-personal-access-token"; // 需包含Code Read权限 var credentials = new VssBasicCredential(string.Empty, patToken); // 初始化Git客户端 using var gitClient = new GitHttpClient(orgUri, credentials); // 获取PR的文件变更 var prFiles = await gitClient.GetPullRequestFilesAsync( project: "your-project", repositoryId: "your-repo-id-or-name", pullRequestId: 123 // 替换为目标PR的ID ); // 输出变更文件信息 foreach (var file in prFiles) { Console.WriteLine($"文件路径: {file.Path} | 变更类型: {file.ChangeType}"); } } }
说明
- 该方法返回的
PullRequestFile集合直接对应PR的最终状态变更,不会包含PR内单个提交的独立变更记录。 - 确保你的Personal Access Token(PAT)拥有Code Read权限。
内容的提问来源于stack exchange,提问作者M SANDEEP
相关产品推荐
相关产品推荐

