You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何一次性从GitHub批量导入多个仓库至Azure DevOps?

批量将GitHub组织仓库迁移至Azure DevOps的方案

当然支持批量导入,完全不需要手动逐个操作,以下是两种实用的实现方案:

方案一:PowerShell脚本+REST API批量迁移

通过结合GitHub API获取仓库列表,再调用Azure DevOps的导入API批量发起迁移,适合需要自定义迁移逻辑的场景。

步骤示例:

  1. 准备令牌:

    • GitHub PAT:需要拥有repo权限(私有仓库需额外权限)
    • Azure DevOps PAT:需要拥有Project Collection Administrator权限或目标项目的Contributor+Create Repository权限
  2. 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扩展,通过简单的命令循环实现批量导入,适合快速操作的场景。

步骤示例:

  1. 安装并配置Azure CLI:

    • 安装Azure CLI后,执行az extension add --name azure-devops添加devops扩展
    • 执行az devops configure --defaults organization=https://dev.azure.com/你的组织名 project=目标项目名配置默认组织和项目
  2. 批量导入脚本示例(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:25:29