如何通过Azure DevOps REST API获取Pull Request文件差异详情
Azure DevOps PR 文件行级差异获取方案
核心推荐:Pull Request Diff API
这个API直接返回类似GitHub原始DIFF的纯文本内容,包含完整的文件变更细节、行级增删标记(+新增、-删除、空格为上下文行),完全满足你获取原始DIFF的需求。
请求示例(curl)
curl -u "你的用户名:个人访问令牌(PAT)" \ "https://dev.azure.com/{组织名}/{项目名}/_apis/git/repositories/{仓库ID}/pullRequests/{PR编号}/diff?api-version=7.1-preview.1"
返回内容示例(片段)
diff --git a/src/Utils.cs b/src/Utils.cs index 8a3f2d..d9c7b1 100644 --- a/src/Utils.cs +++ b/src/Utils.cs @@ -15,7 +15,9 @@ public static class StringHelper { if (string.IsNullOrEmpty(input)) { - return string.Empty; + // 新增:处理null的友好提示 + Console.WriteLine("Input is null or empty"); + return string.Empty; } return input.Trim().ToUpper(); } @@ -30,6 +32,3 @@ public static class StringHelper { return DateTime.Now.ToString("yyyy-MM-dd"); } - - // 删除:废弃的日期格式化方法 - public static string OldDateFormat() => DateTime.Now.ToString("MM/dd/yyyy");关键标记说明:
---对应目标分支的原始文件内容+++对应源分支的修改后文件内容@@ ... @@标注变更的行范围(格式:@@ -原始起始行,原始行数 +修改后起始行,修改后行数 @@)- 行首
+表示新增行,-表示删除行,空格为无变更的上下文参考行
结构化行级变更接口(可选)
如果需要机器可直接解析的结构化行数据(而非纯文本DIFF),可以先通过Pull Request Changes API获取变更文件列表及对应changeId,再针对每个文件请求详情:
1. 获取变更文件列表
curl -u "你的用户名:PAT" \ "https://dev.azure.com/{组织名}/{项目名}/_apis/git/repositories/{仓库ID}/pullRequests/{PR编号}/changes?api-version=7.1-preview.1"
返回结果中每个文件条目会包含唯一的changeId。
2. 获取单个文件的结构化行变更
curl -u "你的用户名:PAT" \ "https://dev.azure.com/{组织名}/{项目名}/_apis/git/repositories/{仓库ID}/pullRequests/{PR编号}/changes/{changeId}?api-version=7.1-preview.1"
返回的changeEntries数组会包含每行的具体变更信息:
changeType:add/delete/edit标记行操作类型sourceLine:原始文件中的行号(删除/修改时有效)targetLine:修改后文件中的行号(新增/修改时有效)content:该行的具体内容
权限说明
个人访问令牌(PAT)需要授予**Code (Read)**权限,确保能正常访问PR相关的代码变更数据。
内容的提问来源于stack exchange,提问作者Suresh Rajamani
相关产品推荐
相关产品推荐

