Как скачать файл из ветки из репозитория Git с помощью Azure DevOps REST Api? - PullRequest
0 голосов
/ 17 января 2019

Для файла в основной ветке я могу использовать следующий URL - http://tfsserver:8080/tfs/DefaultCollection/TFSProject/_apis/git/repositories/GitRepo/items?path=FilePath&api-version=4.1

Но что, если мне нужно скачать файл из ветки?

приписка

Я прекрасно знаю, что могу клонировать git-репозиторий. Мне нужен REST API специально.

РЕДАКТИРОВАТЬ 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 Ответ

0 голосов
/ 17 января 2019

API GetItems Batch включает versionType типа GitVersionType:

Тип версии (ветвь, тег или коммит). Определяет, как Id интерпретируется

Так что, если вы добавите к URL-адресу REST API атрибуты:

?versionType=Branch&version=myBranch

Этого должно быть достаточно, чтобы получить предметы из определенной ветки

Как упоминается в OP, он дает промежуточный URL, который указывает на:

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

Это значит:

...