查找 git 仓库的管理员

55
我是一个公司在GitHub上的git仓库的贡献者。
我想找出哪些贡献者是管理员。
除了四处询问公司中的每个人之外,我该如何找出谁是管理员?

1
很遗憾,我不认为在Github本身上有办法找出那个问题的答案。 - Mark
4个回答

50
如果您有此存储库的推送访问权限,您可以使用Github API查找协作者
您需要一个访问令牌,端点https://api.github.com/repos/ORG/REPO/collaborators将为您提供所有协作者的列表,并列出每个协作者的权限类型:
"permissions": {
    "admin": true,
    "push": true,
    "pull": true
  }

你可以这样使用curljq(用于解析JSON响应):
curl https://api.github.com/repos/ORG/REPO/collaborators \
     -H "Authorization: Token ACCESS_TOKEN" | \
     jq '[ .[] | select(.permissions.admin == true) | .login ]'

4
完全不是我预期的,但它能完成任务。你太强了,@Bertrand Martel。 - ThinkBonobo
2
访问令牌需要什么范围?我在API端点文档中没有看到任何指定的内容:https://developer.github.com/v3/repos/collaborators/#list-collaborators - einnocent
3
如果仓库是公共的,较窄的范围是“public_repo”权限。请参阅权限列表。如果仓库是私有的,则需要“repo”权限。 - Bertrand Martel
2
请注意,?access_token=ACCESS_TOKEN 的用法已被弃用。有关详细信息,请参见https://developer.github.com/changes/2019-11-05-deprecated-passwords-and-authorizations-api/#authenticating-using-query-parameters。 - RTM
2
这个问题是不是因为普通贡献者无法访问存储库中的简单“用户”选项卡? - Chico Carvalho
显示剩余2条评论

8
您也可以使用v4(GraphQL)API来完成此操作:
query { 
  repository (owner:"ORG",name:"REPO") {
    collaborators (first:100) {
      totalCount
      edges {      
        permission
        node {
          login
          name  
        }
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}

查找具有"permission": "ADMIN"的结果。


1
我遇到了这个错误:“必须拥有推送访问权限才能查看存储库的协作者。” 有什么办法可以解决或者说我只是不能查看公共存储库的协作者,因为我无法进行推送操作? - tnrich
@majorBummer 看起来这里有一个解决方法 here - jnnnnn
1
@jnnnnn,那个解决方法似乎只能告诉你有关当前用户的信息。我可以找出自己是否是管理员;但这个问题是在我不是管理员时找出谁是管理员。 - Carl Walsh
你知道如何过滤掉那些具有ADMIN权限的用户吗?在我的情况下,列表太长了,只能返回100个结果。 - Chen Ni
1
@ChenNi 我尝试过滤但找不到方法。也许自那时以来已经添加了一种方法;否则,您将需要使用graphql分页--我认为endCursor是书签。 - jnnnnn

2
如果你喜欢使用Python代码:
def headers(token: str):
    return {"Accept": "application/vnd.github+json",  "Authorization": "Bearer " + token}

def collaborators(api_base: str, token: str, org: str, repo: str):
    users = requests.get(f'https://api.github.com/repos/{org}/{repo}/collaborators', headers=headers(token)).json()
    return [x['login'] for x in users if x['permissions']['admin']]

1
谢谢分享这个选项! - ThinkBonobo

0
你可以通过GitHub的Web API来查找。 在下面的docker中替换为组织的名称。
https://api.github.com/orgs/docker/members?role=admin

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