如何通过Azure DevOps Rest API获取PR中排除合并提交的关联文件列表
Azure DevOps PR 真实变更文件获取方案
方案1:拉取提交列表时过滤合并提交
Azure DevOps 拉取PR提交列表的接口返回的commit对象中,parents字段可直接用于区分合并提交:合并提交的parents数组长度≥2,普通功能提交的parents数组长度为1。你可以在拉取到PR全量提交后,直接过滤掉所有parents长度≥2的提交,再遍历剩余提交的变更列表,即可得到带对应commit id的非合并提交变更文件。
该方案适配原有Pull Request -> Commits -> Changes的流程,改动量小,但如果PR存在交叉合并场景,可能存在少量误差,要求100%对齐PR Files标签效果的话推荐使用方案2。
方案2:调用PR专属变更接口(完全对齐Files标签展示效果)
Azure DevOps 提供了官方的PR全局变更接口,本身就是PR页面Files标签渲染时调用的接口,返回结果和页面展示完全一致,不需要自行遍历commit或做过滤处理:
- 接口调用路径:
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/changes?api-version=7.1-preview.1 - 返回结果的
changeEntries数组中,每个元素都包含文件路径item.path、变更类型changeType、对应提交IDcommitId三个核心字段,没有合并提交带来的多余文件记录,直接解析即可使用。
额外优化建议
如果需要保留原有Commits遍历的流程,除了过滤合并提交外,还可以对同一文件的多次变更做去重处理,只保留最新一次提交对应的变更记录,最终结果和PR Files标签展示效果完全一致。
内容的提问来源于stack exchange,提问作者Rukku
相关产品推荐
相关产品推荐

