如何通过GitHub API获取所有拥有写入权限的仓库(含团队权限)?
高效获取所有拥有写入权限的GitHub仓库
最优方案:使用GitHub GraphQL API
GitHub REST API在处理团队权限关联的仓库过滤时存在局限性,而GraphQL API可以直接在查询阶段筛选出拥有写入权限的仓库,无需事后逐个校验,大幅提升效率。
示例查询代码
query GetReposWithPushAccess { viewer { repositories( first: 100 affiliations: [OWNER, COLLABORATOR, ORGANIZATION_MEMBER] orderBy: {field: NAME, direction: ASC} ) { nodes { nameWithOwner permissions { push } } pageInfo { endCursor hasNextPage } } } }
关键细节说明
- 通过
affiliations参数覆盖所有可能关联的仓库类型:个人拥有、直接协作者、组织成员 - 直接在查询中通过
permissions.push字段筛选出拥有写入权限的仓库,省去后续批量校验步骤 - 支持分页机制:
first:100为单页最大返回数量,通过pageInfo中的endCursor和hasNextPage字段实现翻页获取全部结果
额外优化建议
- 若需要同时获取仓库的Pull Requests,可以在同一个GraphQL查询中嵌套
pullRequests字段,直接关联获取目标数据,无需二次调用API - 若坚持使用REST API,可先调用
GET /user/orgs获取所有加入的组织,再对每个组织调用GET /orgs/{org}/repos并通过permissions.push过滤,但该方式效率远低于GraphQL方案,尤其当组织数量较多时
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

