33

我想通过 github API 获取 repo 上所有拉取请求的列表。

我已经按照http://developer.github.com/v3/pulls/上的说明进行操作,但是当我查询时/repos/:owner/:repo/pulls,它返回的拉取请求始终比网站上显示的要少。

例如,当我查询torvalds/linuxrepo 时,我收到 9 个打开的拉取请求(网站上有 14 个)。如果我添加?state=closed,我会收到一组不同的 11 个关闭的拉取请求(网站显示大约 20 个)。

有谁知道这种差异出现在哪里,以及是否有任何方法可以通过 API 获取 repo 的拉取请求的完整列表?

4

8 回答 8

26

您可以通过变量获取所有拉取请求(关闭、打开、合并)state

只需state=all在 GET 查询中设置,像这样->

https://api.github.com/repos/:owner/:repo/pulls?state=all

更多信息:查看 https://developer.github.com/v3/pulls/#list-pull-requests上的参数表

编辑:根据 Tomáš Votruba 的评论:

“per_page=30”的默认值。最大值为 per_page=100。要获得超过 100 个结果,您需要调用多个项目:“&page=1”、“&page=2”...

于 2016-08-01T13:14:06.450 回答
13

PyGithub ( https://github.com/PyGithub/PyGithub ) 是一个用于访问 GitHub API v3 的 Python 库,使您能够获取分页资源。

例如,

g = Github(login_or_token=$YOUR_TOKEN, per_page=100)
r = g.get_repo($REPO_NUMBER)

for pull in r.get_pulls('all'):
    # You can access pulls

请参阅文档(http://pygithub.readthedocs.io/en/latest/index.html)。

于 2017-01-17T23:16:25.477 回答
4

使用 Github 新的官方CLI(命令行界面):

gh pr list --repo OWNER/REPO

这会产生类似的东西:

Showing 2 of 2 pull requests in OWNER/REPO

#62  Doing something    that-weird-branch-name
#58  My PR title        wasnt-inspired-branch

请参阅其他详细信息和选项以及安装说明

于 2020-05-29T05:32:38.977 回答
3
  1. 如果要检索所有拉取请求(提交、评论、问题等),则必须使用分页。 https://developer.github.com/v3/#pagination

  2. GET 请求“拉”只会返回打开的拉请求。

  3. 如果要获取所有拉取请求,请将参数状态设置为 all,或者使用问题。

额外的信息

如果你需要来自 Github 的其他数据,例如问题,那么你可以从问题中识别拉取请求,然后你可以检索每个拉取请求,无论它是关闭还是打开。它还会为您提供更多属性(可合并、合并、merge-commit-sha、nr of commits 等)如果问题是拉取请求,那么它将包含该属性。否则,这只是一个问题。

来自 API: https ://developer.github.com/v3/pulls/#labels-assignees-and-milestones

“每个拉取请求都是一个问题,但并非每个问题都是一个拉取请求。因此,问题 API 中提供了两个功能的“共享”操作,例如操作受让人、标签和里程碑。”

编辑我刚刚发现问题的行为类似于拉取请求,因此需要通过将状态参数设置为 all 来检索所有内容

于 2014-11-11T17:09:35.057 回答
2

有一种方法可以获得完整的列表,而您正在这样做。您使用什么与 API 进行通信?我怀疑你可能没有正确地做某事。例如(目前只有 13 个打开的拉取请求)使用我的 API 包装器(github3.py)我得到所有打开的拉取请求。如何在没有我的 python 包装器的情况下做到这一点的一个例子是:

import requests
r = requests.get('https://api.github.com/repos/torvalds/linux/pulls')
len(r.json()) == 13

我也可以通过自己计算结果在 cURL 中(模糊地)获得该结果:curl https://api.github.com/repos/torvalds/linux/pulls

但是,如果您遇到超过 25 个(或 30 个)拉取请求的存储库,这是一个完全不同的问题,但肯定不是您现在遇到的问题。

于 2013-07-03T02:25:05.227 回答
1

GitHub 提供了一个“链接”标头,它指定上一个、下一个和最后一个 URL 以获取值。例如,链接标头响应, <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=2>; rel="next", <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=15>; rel="last" rel="next"建议下一组值。

于 2019-09-19T08:23:39.757 回答
1

搜索 API 应该帮助:https ://help.github.com/enterprise/2.2/user/articles/searching-issues/

q = repo:org/name is:pr ...

于 2015-09-14T07:58:04.683 回答
1

您还可以使用GraphQL API v4来请求 repo 的所有拉取请求。如果您不指定states字段,它会默认请求所有拉取请求:

{
  repository(name: "material-ui", owner: "mui-org") {
    pullRequests(first: 100, orderBy: {field: CREATED_AT, direction: DESC}) {
      totalCount
      nodes {
        title
        state
        author {
          login
        }
        createdAt
      }
    }
  }
}

在资源管理器中尝试

于 2020-06-08T19:19:13.343 回答