如何使用Azure DevOps REST Api从Git存储库下载分支中的文件?
对于master分支中的文件,我可以使用以下URL- http://tfsserver:8080/tfs/DefaultCollection/TFSProject/_apis/git/repositories/GitRepo/items?path = FilePath& api-版本= 4.1
For a file in the master branch I can use the following URL - http://tfsserver:8080/tfs/DefaultCollection/TFSProject/_apis/git/repositories/GitRepo/items?path=FilePath&api-version=4.1
但是如果我需要从分支机构下载文件怎么办?
But what if I need to download a file from the branch?
P.S.
我完全知道我可以克隆一个git仓库.我特别需要REST API.
I know perfectly well that I can clone a git repository. I need REST API specifically.
编辑1
因此,我尝试了以下代码:
So, I tried the following code:
$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
成功,但是生成的文件与我期望的不完全相同:
It succeeds, but the generated file is not exactly what I expected:
{"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
However, it gives the URL I can use to get the file from branch - 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方法的名字是什么?
And it works as expected. But I still do not know what is the name of this API method?
类型为的
: versionType
> GitVersionType
The GetItems Batch API does include a versionType
of type GitVersionType
:
版本类型(分支,标记或提交).确定ID的解释方式
Version type (branch, tag, or commit). Determines how Id is interpreted
因此,如果您将REST API URL添加到属性中,则:
So if you add to your REST API URL the attributes:
?versionType=Branch&version=myBranch
这应该足以从特定分支获取项目
That should be enough to get the items from a specific branch
如OP所述,它提供了一个指向以下内容的中间URL:
As the OP mentions, it gives an intermediate URL which points to:
http://tfsserver:8080/tfs/{organization}/{project}/_apis/git/repositories/{repositoryId}/items/{path}?versionType=Branch&version=myBranch
这意味着:
- 它按预期使用
?versionType = Branch& version = myBranch
- 但是它使用
_apis/git/repositories/{repositoryId}/items
项目获取API ,而不是_apis/git/repositories/{repositoryId}/itemsbatch
- it uses as expected
?versionType=Branch&version=myBranch
- But it uses
_apis/git/repositories/{repositoryId}/items
Items Get API, not_apis/git/repositories/{repositoryId}/itemsbatch