仅获取协作者,而不是 github 存储库的 ORG 的所有者

Get only the collaborators, not the owners of the ORG of the github repo

我有 Github 个组织,其所有者为 Owner1 和 Owner2,成员为 Member1 和 Member2。 现在,我在该组织中创建了一个新存储库,并添加了两个用户作为该存储库的协作者(user1 和 user2)。

现在 postman 与以下 GET 请求的结果将导致以下结果:

Owner1
Owner2
user1
user2

POSTMAN 请求:https://<github-host>/api/v3/repos/<my-gihub-org>/<my-github-repo>/collaborators?per_page=100

但我只想列出协作者,即 user1user2;不是所有者

有人可以帮我吗..!

默认情况下,所有者是协作者,因此它始终是 return 所有者,您可以检查关闭管理员标记的用户,如果这就是所有者的意思

我不确定一个存储库怎么会有两个所有者

使用最新的 git api:

https://api.github.com/repos/{owner}/{repo}/collaborators

您可以在邮递员中使用以下预请求脚本来仅打印非所有者:

const postRequest = {
    url: ' https://api.github.com/orgs/<org>/members\role=admin',
    method: 'GET',
    header: {
        'Content-Type': 'application/json',
        'Accept': 'application/vnd.github.v3+json'
    },
    auth: {
        "type": "basic",
        "basic": [
            { "key": "username", "value": "<yourusername>" },
            { "key": "password", "value": "<yourtoken>" }
        ]
    }

};
pm.sendRequest(postRequest, (error, responseOwner) => {
    if (error) {
        console.log("THe errror is : " + JSON.stringify(error))
    } else {
        for (let i of pm.response.json()) {
            let found = 0;
            for (let j of responseOwner.json()) {
                i.login === j.login ? found = 1 : null
            }
            found === 1 ? null : console.log(i)
        }

    }
});

您可以传递affiliation参数,以过滤掉直接在某个项目上工作的任何协作者。

curl -H "Authorization: <bearer KEY>" \
     -H "Accept: application/vnd.github.v3+json" \
     -XGET https://api.github.com/repos/:org/:repo/collaborators\?affiliation\=direct

这应该 return 只是项目的工作人员,而不是 协作者和所有者。

GitHub 表示:

affiliation | string | query
Filter collaborators returned by their affiliation. Can be one of:

  • outside: All outside collaborators of an organization-owned repository.
  • direct: All collaborators with permissions to an organization-owned repository, regardless of organization membership status.
  • all: All collaborators the authenticated user can see.

如果碰巧所有者也是这个仓库的直接合作者,那么你必须做另一个请求,其中您检查谁是所有者,然后从协作者请求中过滤掉他们。


curl -H "Authorization: <bearer KEY>" \
     -H "Accept: application/vnd.github.v3+json" \
     -XGET https://api.github.com/orgs/:org/members\?role\=admin

通过此请求,您可以检查组织的所有者。


如果您喜欢使用新的 graphql 功能,那么您可以查询

{
  organization(login: "org_name") {
    id
    name
    repository(name: "repo_name") {
      collaborators(affiliation: DIRECT, first: N) {
        edges {
          permission
          node {
            name
          }
        }
      }
    }
  }
}