簡體   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