如何一次性从GitHub批量导入多个仓库至Azure DevOps?
批量将GitHub组织仓库迁移至Azure DevOps的方案
当然支持批量导入,完全不需要手动逐个操作,以下是两种实用的实现方案:
方案一:PowerShell脚本+REST API批量迁移
通过结合GitHub API获取仓库列表,再调用Azure DevOps的导入API批量发起迁移,适合需要自定义迁移逻辑的场景。
步骤示例:
准备令牌:
- GitHub PAT:需要拥有
repo权限(私有仓库需额外权限) - Azure DevOps PAT:需要拥有
Project Collection Administrator权限或目标项目的Contributor+Create Repository权限
- GitHub PAT:需要拥有
PowerShell脚本示例:
# 配置参数 $githubOrg = "你的GitHub组织名" $githubPat = "你的GitHub PAT" $azureDevOpsOrg = "你的Azure DevOps组织名" $azureDevOpsProject = "目标Azure DevOps项目名" $azureDevOpsPat = "你的Azure DevOps PAT" # 获取GitHub组织下的所有仓库 $githubHeaders = @{Authorization = "token $githubPat"} $repos = Invoke-RestMethod -Uri "https://api.github.com/orgs/$githubOrg/repos?per_page=100" -Headers $githubHeaders # 遍历仓库批量导入 foreach ($repo in $repos) { $importUrl = "https://dev.azure.com/$azureDevOpsOrg/$azureDevOpsProject/_apis/git/repositories?api-version=7.1-preview.1" $azureHeaders = @{Authorization = "Basic $([Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$azureDevOpsPat")))"} $body = @{ name = $repo.name importRequest = @{ url = $repo.clone_url type = "git" parameters = @{ auth = @{ token = $githubPat } } } } | ConvertTo-Json # 发起导入请求 Invoke-RestMethod -Uri $importUrl -Method Post -Headers $azureHeaders -Body $body -ContentType "application/json" Write-Host "已发起仓库 $($repo.name) 的导入请求" }
方案二:Azure CLI批量迁移
利用Azure DevOps的CLI扩展,通过简单的命令循环实现批量导入,适合快速操作的场景。
步骤示例:
安装并配置Azure CLI:
- 安装Azure CLI后,执行
az extension add --name azure-devops添加devops扩展 - 执行
az devops configure --defaults organization=https://dev.azure.com/你的组织名 project=目标项目名配置默认组织和项目
- 安装Azure CLI后,执行
批量导入脚本示例(Bash):
# 配置参数 GITHUB_ORG="你的GitHub组织名" GITHUB_PAT="你的GitHub PAT" # 获取GitHub仓库列表(需提前安装jq) REPOS=$(curl -s -H "Authorization: token $GITHUB_PAT" "https://api.github.com/orgs/$GITHUB_ORG/repos?per_page=100" | jq -r '.[].clone_url') # 遍历导入每个仓库 for REPO in $REPOS; do REPO_NAME=$(basename $REPO .git) az repos import create --git-url $REPO --repository $REPO_NAME --git-service-authorization-token $GITHUB_PAT echo "已发起仓库 $REPO_NAME 的导入请求" done
注意事项:
- 如果GitHub组织仓库超过100个,需要处理API分页(GitHub API默认每页100条,可通过
page参数翻页) - 迁移过程中可通过Azure DevOps界面或API监控导入状态
- 私有仓库需确保GitHub PAT拥有足够权限,避免导入失败
内容的提问来源于stack exchange,提问作者Ashraf Ullah
相关产品推荐
相关产品推荐

