繁体   English   中英

有没有办法通过 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 端点一些与此相关的数据,但它实际上只是对更改了哪些文件以及这些更改的高级性质的概述,以及表示每个 state(之前和之后)中文件的特定 blob 的 ID。

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

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

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

第 1 步:您可以使用 Rest API 获取提交 ID

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

第 2 步:您可以使用 Rest API 通过提交 ID 获取提交

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

在 Rest API Result中,需要记录“parentsid”、“path”的值。

Step3:您可以使用以下 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 结果

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM