代码之家  ›  专栏  ›  技术社区  ›  mark

如何使用Azure DevOps REST API从Git repo下载分支中的文件?

  •  3
  • mark  · 技术社区  · 5 年前

    对于主分支中的文件,我可以使用以下URL- http://tfsserver:8080/tfs/DefaultCollection/TFSProject/_apis/git/repositories/GitRepo/items?path=FilePath&api-version=4.1

    但是如果我需要从分支下载一个文件呢?

    附笔。

    我非常清楚我可以克隆一个Git存储库。我特别需要RESTAPI。

    编辑1

    因此,我尝试了以下代码:

    $Url = "http://tfsserver:8080/tfs/DefaultCollection/code/_apis/git/repositories/xyz/itemsbatch?api-version=4.1"
    $Body = @"
    {
        "itemDescriptors": [
        {
            "path": "/Bootstrap.ps1",
            "version": "shelve/vsts",
            "versionType": "branch"
        }]
    }
    "@
    Invoke-RestMethod -UseDefaultCredentials -Uri $Url -OutFile $PSScriptRoot\AutomationBootstrapImpl.ps1 -Method Post -ContentType "application/json" -Body $Body
    

    它成功了,但生成的文件与我预期的不完全相同:

    {"count":1,"value":[[{"objectId":"ceb9d83e971abdd3326d67e25b20c2cb1b4943e2","gitObjectType":"blob","commitId":"d4a039914002613e775f6274aee6489b244a42a7","path":"/bootstrap.ps1","url":"http://tfsserver:8080/tfs/DefaultCollection/code/_apis/git/repositories/xyz/items/bootstrap.ps1?versionType=Branch&version=shelve%2Fvsts&versionOptions=None"}]]}
    

    但是,它提供了我可以用来从分支获取文件的URL- http://tfsserver:8080/tfs/DefaultCollection/code/_apis/git/repositories/xyz/items/bootstrap.ps1?versionType=Branch&version=shelve%2Fvsts&versionOptions=None

    所以,我们来这里:

    $Url = "http://tfsserver:8080/tfs/DefaultCollection/code/_apis/git/repositories/xyz/items/bootstrap.ps1?versionType=Branch&version=shelve/vsts"
    Invoke-RestMethod -UseDefaultCredentials -Uri $Url -OutFile $PSScriptRoot\AutomationBootstrapImpl.ps1
    

    而且它也像预期的那样工作。但是我仍然不知道这个API方法的名称是什么?

    1 回复  |  直到 5 年前
        1
  •  2
  •   VonC    5 年前

    这个 GetItems Batch API 包括一个 versionType of type GitVersionType :

    版本类型(分支、标记或提交)。确定如何解释ID

    因此,如果将属性添加到RESTAPI URL中:

    ?versionType=Branch&version=myBranch
    

    这应该足够从一个特定的分支获取项目

    正如OP提到的,它提供了一个中间URL,指向:

    http://tfsserver:8080/tfs/{organization}/{project}/_apis/git/repositories/{repositoryId}/items/{path}?versionType=Branch&version=myBranch
    

    这意味着: