如何获取Azure DevOps中的所有仓库

14

我在Azure DevOps中有多个项目,希望能够迭代所有存储库并获取存储库名称、创建者和最后更新/提交信息。

当有人创建新的存储库时,我想得到通知。

4个回答

18

我们可以通过 REST API 列出仓库信息。

列出所有仓库 并获得仓库名称:

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories?api-version=6.1-preview.1

获取创建者:

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/refs?api-version=6.1-preview.1

注意:通过此 API 我们可以获取分支创建者的信息,但我没有找到任何 API 可以获取仓库创建者的信息。

获取最新提交

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?searchCriteria.$top=1&api-version=6.1-preview.1

在有人创建新仓库时收到通知

我们无法创建此通知,但我们可以在有人更新仓库代码时接收到通知。 请参考此链接获取更多详细信息:支持的事件类型

更新1

//List project name
$connectionToken="PAT"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$ProjectUrl = "https://dev.azure.com/{organization}/{project}/_apis/git/repositories?api-version=6.1-preview.1" 
$Repo = (Invoke-RestMethod -Uri $ProjectUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$RepoName= $Repo.value.name
Write-Host  $RepoName

//get latest commit info and branch creator
$RepoID=$Repo.value.id
Write-Host  $RepoID
ForEach ($Id in $RepoID)
{

//Get latest commit info
$ProjectUrl = "https://dev.azure.com/{organization}/{project}/_apis/git/repositories/$Id/commits?api-version=6.1-preview.1" 
$CommitInfo = (Invoke-RestMethod -Uri $ProjectUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$CommitID = $CommitInfo.value.commitId | Select-Object -first 1
Write-Host $CommitID
$CommitUrl = "https://dev.azure.com/{organization}/{project}/_apis/git/repositories/$Id/commits/$($CommitID)?api-version=6.0-preview.1"
$LatestCommitInfo = (Invoke-RestMethod -Uri $CommitUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
Write-Host "LatestCommitInfo = $($LatestCommitInfo | ConvertTo-Json -Depth 100)"

//Get branch name and creatot
$BarchCreatorUrl = "https://dev.azure.com/{organization}/{project}/_apis/git/repositories/$Id/refs?api-version=6.1-preview.1"
$CreateorInfo = (Invoke-RestMethod -Uri $BarchCreatorUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
Write-Host $CreateorInfo.value.name
Write-Host $CreateorInfo.value.creator.displayName
}

1
有没有 PowerShell 脚本代码可以在单个执行中完成上述所有操作? - Pradeep
1
嗨@Pradeep,我已经更新了答案,请查看。 - Vito Liu
谢谢@Vito,一旦我测试了上面的脚本,我就会接受你的答案。 - Pradeep
嗨@Pradeep,随时让我知道结果。如果你还有任何问题,我仍然会在这里帮助你。 - Vito Liu
谢谢,我的URL结构不同,但这仍然有效:https://{organization}.visualstudio.com/{project}/_apis/git/repositories?api-version=6.1-preview.1 - mukesh.kumar
显示剩余2条评论

6
另一个选项(在Auth部分中更容易)是通过以下命令使用AZ CLI检索您的Azure存储库:
  1. Log into Azure

    az login -t $tenant
    
  2. First configure default values for organization and project, this will help you to not specify --project and --organization parameters in every az devops/repos command:

    az devops configure -d organization=$organizationUrl project=$project
    
  3. List repositories of your subscription and default project and organization

    az repos list --subscription $subscription
    

我们如何知道订阅情况? - Urasquirrel

2
Install-Module -Name VSTeam 
$pat="YYYY"
Set-VSTeamAccount https://dev.azure.com/dXXXX/ -PersonalAccessToken $pat
Get-VSTeamGitRepository

0

或者您可以运行此脚本(如果 az devops 不起作用,则添加 azure-devops 扩展),并记得将 URL-of-your-ado-org 替换为您的实际 URL:

    # will be prompted to log in via browser
    az login

    # get all your ADO projects in your org in json format
    $adoprojs = az devops project list

    # convert to powershell object
    $projObjs = $adoprojs | ConvertFrom-Json

    # loop through each ADO project and find it's repos
    foreach ($proj in $projObjs.value.name) {
        write-host "looking in $proj ADO project for repos"
        # set to specific ADO project
        az devops configure --defaults organization=URl-of-your-ado-org project=$proj
        # now get it's repos (in json)
        $jsonRepos = az repos list
        # convert repos from json format to powershell object
        $RepoObjs = $jsonRepos | ConvertFrom-Json
        # now list each repo
        foreach ($repo in $RepoObjs) {
            write-host "  " $repo.name
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接