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

如何使用Azure DevOps与GitHub API实现权限从Azure DevOps到GitHub的迁移

借助Azure DevOps和GitHub API完成权限迁移操作指南

一、前期准备

  • 拿到Azure DevOps的个人访问令牌(PAT):权限范围至少要包含组织读取、项目读取、身份读取,否则无法拉取完整的权限数据
  • 拿到GitHub的个人访问令牌(PAT):组织级迁移需要repo、admin:org权限;仓库级迁移仅需repo权限,可按需调整
  • 明确迁移范围:是整组织权限、特定项目/仓库权限,还是指定团队的权限映射,避免无目标操作

二、导出Azure DevOps权限数据

1. 拉取基础身份与权限配置信息

先获取组织内所有用户和团队的身份数据:

GET https://vssps.dev.azure.com/{你的组织名}/_apis/graph/users?api-version=7.1-preview.1

再获取权限命名空间(找到对应场景的权限ID,比如Git仓库、项目管理类的权限ID):

GET https://dev.azure.com/{你的组织名}/_apis/securitynamespaces?api-version=7.1-preview.1

2. 拉取具体权限条目

  • 组织级权限:使用上述拿到的命名空间ID,调用接口拉取权限条目:
GET https://dev.azure.com/{你的组织名}/_apis/securityacl/namespaces/{namespaceId}/aces?api-version=7.1-preview.1
  • 仓库级权限:先获取项目下的所有仓库列表:
GET https://dev.azure.com/{你的组织名}/{项目名}/_apis/git/repositories?api-version=7.1-preview.1

再针对每个仓库,使用Git对应的命名空间ID拉取权限:

GET https://dev.azure.com/{你的组织名}/{项目名}/_apis/securityacl/namespaces/{namespaceId}/aces?token=repoV2/{项目ID}/{仓库ID}&api-version=7.1-preview.1

3. 整理适配GitHub的数据

  • 身份映射:Azure DevOps的用户标识为aad.{guid}或msa.{guid},需对应到GitHub的用户名或邮箱(企业版可直接用Azure AD同步的邮箱匹配)
  • 权限转换:将Azure DevOps的细粒度权限(如Contribute、Read)转换为GitHub的角色(Owner、Maintainer、Write、Read),GitHub Enterprise用户可通过自定义权限补全细节

三、通过GitHub API导入权限

1. 先导入用户/团队到GitHub组织

  • 邀请用户:若目标用户不在GitHub组织内,调用接口发送邀请:
POST https://api.github.com/orgs/{你的GitHub组织名}/invitations

请求体需包含用户邮箱与对应角色

  • 创建团队:若需迁移Azure DevOps的团队权限,先创建对应GitHub团队:
POST https://api.github.com/orgs/{你的GitHub组织名}/teams

2. 分配仓库级权限

  • 用户权限:为指定仓库添加协作人并设置权限:
PUT https://api.github.com/repos/{你的GitHub组织名}/{仓库名}/collaborators/{用户名}

请求体的permission参数填push(对应Write)、pull(对应Read)、admin(对应Owner)

  • 团队权限:为团队分配指定仓库的权限:
PUT https://api.github.com/orgs/{你的GitHub组织名}/teams/{团队slug}/repos/{你的GitHub组织名}/{仓库名}

同样通过permission参数设置权限等级

3. 分配组织级权限

  • 用户组织角色:调整用户在GitHub组织内的角色:
PUT https://api.github.com/orgs/{你的GitHub组织名}/members/{用户名}

role参数填admin(Owner)或member(普通成员)

  • 团队组织权限:若需给团队设置组织级权限(如创建仓库),通过团队配置接口调整对应权限

四、验证与补漏

  • 权限核对:调用GitHub API拉取已分配的权限,与Azure DevOps原始数据对比,确保无遗漏
  • 特殊权限处理:Azure DevOps的分支权限(如强制审批)需对应到GitHub的分支保护规则,调用接口配置:
POST https://api.github.com/repos/{你的GitHub组织名}/{仓库名}/branches/{分支名}/protection
  • 拒绝权限替代:GitHub无直接拒绝权限,可通过排除用户/团队、配置分支保护或仓库权限限制实现类似效果

注意事项

  • 权限非完全一一对应:Azure DevOps的部分细粒度权限,GitHub只能通过角色或自定义权限近似替代,需根据业务需求调整
  • 注意API速率限制:Azure DevOps每分钟最多1000次请求,GitHub每小时最多5000次(个人令牌),批量操作时需添加延时或分批次执行
  • 先测试再正式迁移:建议在测试组织/仓库完成迁移验证后,再操作生产环境

内容的提问来源于stack exchange,提问作者user10434309

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:07:04