1

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

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

Owner1
Owner2
user1
user2

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

但我有兴趣只列出合作者,即user1user2;不是业主

有人可以在这里帮我..!

4

2 回答 2

4

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

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

这应该只返回从事项目工作的人,而不是合作者和所有者

GitHub 声明:

隶属关系 | 字符串 | 查询
过滤由其隶属关系返回的合作者。可以是以下之一:

  • 外部:组织拥有的存储库的所有外部协作者。
  • 直接:对组织拥有的存储库具有权限的所有协作者,无论组织成员身份如何。
  • all:经过身份验证的用户可以看到的所有协作者。

如果碰巧所有者也是此 repo 的直接合作者,那么您必须执行另一个请求,检查哪个人是所有者,然后从合作者请求中过滤掉他们。


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
          }
        }
      }
    }
  }
}

于 2020-12-01T12:15:03.590 回答
0

默认情况下,所有者是协作者,因此它将始终返回所有者,如果这是所有者的意思,您可以检查关闭 admin 标志的用户

我不确定存储库如何拥有两个所有者

使用最新的 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)
        }

    }
});
于 2020-12-01T08:46:19.897 回答