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

Is there a way to get the raw diff of a commit via the Azure Devops API?

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

我没能在 Azure DevOps 中找到同样的功能,但是:diffs endpoint一些 相关的数据,但它真的只是概述更改了哪些文件和这些更改的高级性质,以及代表每个状态(之前和之后)的文件的特定 blob 的 ID。

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

是否有单独的 API 端点或技术让我们了解原始差异?它不需要直接成为 la git diff 的原始差异,只需让我们看到每个 line(而不是每个文件)的前后状态的任何东西最少 API 次调用(最好只有一次)。我已经通过文档和 Whosebug 上的此处进行了大量搜索,但没有找到任何可以实现此目的的东西。

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

的内容

第 1 步:您可以使用 Rest API 到 get the commit id

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?api-version=5.0

第 2 步:您可以使用 Rest API 到 get the commit by commit id

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?changeCount={changeCount}&api-version=5.0

在RestAPIResult中,需要记录“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表示添加)

这是一个结果示例:

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