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

Mat*_*ter 7 azure-devops azure-devops-rest-api

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

然而,我在 Azure DevOps 中没有找到相同的功能:diffs 端点一些与此相关的数据,但它实际上只是对哪些文件已更改以及这些更改的高级性质的概述,以及代表每个状态(之前和之后)的文件的特定 blob 的 ID。

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

是否有单独的 API 端点或技术可以让我们获取原始差异?它不需要是直接的原始 diff ,只要能让我们通过最少的 API 调用(最好只有一个)来查看每一git diff(而不是每个文件)的前后状态即可。我在 StackOverflow 上的文档和此处进行了大量搜索,但没有找到任何可以实现此目的的内容。

Kev*_*SFT 3

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

\n\n

第1步:您可以使用Rest API来获取commit id

\n\n
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?api-version=5.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤2:您可以使用 Rest API通过 commit id 获取提交

\n\n
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?changeCount={changeCount}&api-version=5.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Rest API Result 中,您需要记录 \xe2\x80\x9cparentsid\xe2\x80\x9d, \xe2\x80\x9cpath\xe2\x80\x9d的值。

\n\n

步骤3:您可以使用以下API来获取diff内容。

\n\n
Post https://dev.azure.com/Organization/Project /_api/_versioncontrol/fileDiff?__v=5&diffParameters={value}&repositoryId={repositoryid}\n
Run Code Online (Sandbox Code Playgroud)\n\n

{value}是Json类型。

\n\n

这是一个例子:

\n\n
{"originalPath":"filepath","originalVersion":"Parentsid","modifiedPath":"filepath","modifiedVersion":"commitid","partialDiff":true,"includeCharDiffs":true}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以将该值添加到 API URL。

\n\n

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

\n\n

这是结果示例:

\n\n

接口结果

\n\n

这是我参考的票,希望对你有帮助。

\n