使用 REST API 从 AzureDevOps 删除项目 (gitObjectType: blob)

Posted

技术标签:

【中文标题】使用 REST API 从 AzureDevOps 删除项目 (gitObjectType: blob)【英文标题】:Deleting items (gitObjectType: blob) from AzureDevOps using REST API 【发布时间】:2022-01-18 00:53:52 【问题描述】:

我正在编写一个脚本(在 Python 中),它将使用 REST API 从 Azure DevOps 存储库中删除给定的项目。我正在失去希望它是可能的。

假设我有一个对象列表,其中列出了来自 Microsoft 文档 (https://docs.microsoft.com/en-us/rest/api/azure/devops/git/items/list?view=azure-devops-rest-6.0) 的示例请求:

GET https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views&recursionLevel=Full&includeContentMetadata=true&api-version=6.0

以及示例结果的部分:

(...)

      "objectId": "9093f030aa7dd8c802cad228fae4c6bafae4b32f",
      "gitObjectType": "blob",
      "commitId": "23d0bc5b128a10056dc68afece360d8a0fabb014",
      "path": "/MyWebSite/MyWebSite/Views/Home/Index.cshtml",
      "url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/MyWebSite/MyWebSite/Views/Home/Index.cshtml?versionType=Branch&versionOptions=None"
    ,
    
      "objectId": "61a86fdaa79e5c6f5fb6e4026508489feb6ed92c",
      "gitObjectType": "blob",
      "commitId": "23d0bc5b128a10056dc68afece360d8a0fabb014",
      "path": "/MyWebSite/MyWebSite/Views/Home/_Home.cshtml",
      "url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/MyWebSite/MyWebSite/Views/Home/_Home.cshtml?versionType=Branch&versionOptions=None"
    ,
    
      "objectId": "445986f7957f0478686b6def4dcd04d2bad00594",
      "gitObjectType": "blob",
      "commitId": "23d0bc5b128a10056dc68afece360d8a0fabb014",
      "path": "/MyWebSite/MyWebSite/Views/Home/_Login.cshtml",
      "url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/MyWebSite/MyWebSite/Views/Home/_Login.cshtml?versionType=Branch&versionOptions=None"
    
(...)

有什么方法可以使用 REST API 删除其中一个 blob? 任何帮助,将不胜感激。谢谢!

【问题讨论】:

Git 哈希表示的其中一个内容是系统状态,包括所有 blob。如果您可以只删除其中一个,那么哈希将无效,并且您的 repo 将被破坏。 “删除”某些东西的正确方法是创建一个新的提交来删除它。如果您需要它看起来好像它从未存在过,那么您应该从它添加到 repo 之前开始重写整个历史记录。 请注意,Git 没有 REST API。各种托管站点都有 REST API,但如何使用这些 API 取决于每个托管站点。 【参考方案1】:

好的,谢谢你的支持。

我解决了这个问题。采取的步骤:

    https://docs.microsoft.com/en-us/rest/api/azure/devops/git/refs/list?view=azure-devops-rest-5.1 -> 用于获取给定分支的 objectId。此 objectId 是下一步所必需的(作为“oldObjectId”) https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pushes/create?view=azure-devops-rest-5.1#delete-a-file

【讨论】:

以上是关于使用 REST API 从 AzureDevOps 删除项目 (gitObjectType: blob)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PowerShell 中使用 Rest API 创建服务更改

通过REST API访问PBI上的“剩余工作”

Azure DevOps 发布 Api 400 错误请求错误

C# - 如何从 Azure DevOps 工作项列表反序列化 json?

将成员添加到 Azure DevOps 团队

检查分支被锁定的次数以及锁定 Azure DevOps Rest API 的可能原因