Azure devops 有没有办法通过Azure Devops API获得提交的原始差异?

Azure devops 有没有办法通过Azure Devops API获得提交的原始差异?,azure-devops,azure-devops-rest-api,Azure Devops,Azure Devops Rest Api,作为我们应用程序的一部分,我们正在构建与Azure DevOps的REST API集成的能力。我们感兴趣的一个关键组件是能够看到特定提交的实际差异,以便我们可以查看和分析行内容。我们已经为GitHub、GitLab和Bitbucket创建了这种集成,每次都很简单:每个都有一个相当简单的diff端点,它接受一个特定的提交ID并对其进行区分(有时使用一个特定的父提交) 然而,我在Azure DevOps中没有发现多少相同的功能:有一些与此相关的数据,但它实际上只是对哪些文件发生了更改以及这些更改的高

作为我们应用程序的一部分,我们正在构建与Azure DevOps的REST API集成的能力。我们感兴趣的一个关键组件是能够看到特定提交的实际差异,以便我们可以查看和分析行内容。我们已经为GitHub、GitLab和Bitbucket创建了这种集成,每次都很简单:每个都有一个相当简单的diff端点,它接受一个特定的提交ID并对其进行区分(有时使用一个特定的父提交)

然而,我在Azure DevOps中没有发现多少相同的功能:有一些与此相关的数据,但它实际上只是对哪些文件发生了更改以及这些更改的高级性质的概述,以及表示每个状态(之前和之后)的文件的特定Blob的ID

从理论上讲,可以使用这些blob手动构造我所要的内容,事实上,我已经能够查询前后blob以获得每个文件的差异。但是,每个文件有两个独立的端点查询——进行20个文件的提交,突然之间我们需要40个API调用来构造一个合理的差异。不幸的是,这并不真正符合我们的性能需求


是否有单独的API端点或技术可以让我们了解原始差异?它不需要是一个原始的diff a la
git diff
,只需要通过最少的API调用(最好只有一个)就可以看到每一行(而不是每一个文件)的前后状态。我在StackOverflow上对文档和这里做了大量的搜索,没有找到任何可以实现这一点的方法。

现有的Rest API无法满足您的需要。但是您可以参考以下步骤来获取git diff的内容

第1步:您可以使用RESTAPI来实现

第2步:您可以使用RESTAPI来实现

在RESTAPI结果中,您需要记录“parentsid”、“path”的值

步骤3:您可以使用以下API获取差异内容

Post https://dev.azure.com/Organization/Project /_api/_versioncontrol/fileDiff?__v=5&diffParameters={value}&repositoryId={repositoryid}
{value}是Json类型

以下是一个例子:

{"originalPath":"filepath","originalVersion":"Parentsid","modifiedPath":"filepath","modifiedVersion":"commitid","partialDiff":true,"includeCharDiffs":true}
您可以将该值添加到API URL

然后运行API,结果将包含git diff内容。(2表示移除,1表示添加)

以下是一个结果示例:


这就是我所指的,希望对您有所帮助。

这是否回答了您的问题?感谢您的响应,但假设我正确使用了API端点,它将返回一个500错误,在其他一些JSON中出现“TF10144:“F”不是受支持的版本规范类型”。我们使用的URI是
https://ourorg.visualstudio.com/ourrepo/_api/_versioncontrol/fileDiff?__v=5&_repositoryId=&diffParameters=
(与您链接的票证相同-使用此处提到的票证没有区别)。我在谷歌上找不到多少与API相关的错误-我有什么地方做错了吗?@MatthewKloster从URL中,我注意到在“repositoryId”之前有一个额外的
\uucode>字符。您可以删除它并再次测试API(&repositoryId={repoid})。
Post https://dev.azure.com/Organization/Project /_api/_versioncontrol/fileDiff?__v=5&diffParameters={value}&repositoryId={repositoryid}
{"originalPath":"filepath","originalVersion":"Parentsid","modifiedPath":"filepath","modifiedVersion":"commitid","partialDiff":true,"includeCharDiffs":true}