【问题标题】:Get last x commits from Github repo using Github Api V4使用 Github Api V4 从 Github repo 获取最后 x 次提交
【发布时间】:2018-01-05 22:20:06
【问题描述】:

我正在尝试使用新的 Github GraphQL api (v4),但我似乎无法弄清楚如何获取 ma​​ster 的最后 x 次提交。我使用了 repositoryref,但它们仍然不能满足我的需求。

下面的查询几乎可以满足我的需要:

query{
  repository(owner: "typelevel", name: "cats") {
    refs(refPrefix:"refs/heads/", last: 5) {
      edges{
        node {
          associatedPullRequests(states: MERGED, last: 5) {
            edges{
              node {
                title
                baseRef {
                  name
                  prefix
                }
                baseRefName
                commits(last: 10) {
                  edges {
                    node {
                      commit {
                        abbreviatedOid
                        message

                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

但是:

  1. 似乎与 repo 中的内容不完全匹配
  2. 仅限于 PR
  3. 似乎太笨拙了

我也尝试过使用 defaultBranchRef,但这也没有用:

query{
  repository(owner: "typelevel", name: "cats") {
    defaultBranchRef {
      name
      prefix
      associatedPullRequests(states: [MERGED], last: 5) {
        edges {
          node {
            title
          }
        }
      }
    }
  }
}

我一直在使用 Github api 页面上的 explorer app 测试查询。

有什么想法吗?

【问题讨论】:

    标签: github graphql github-api


    【解决方案1】:

    我能够做到这一点:

    query {
      repository(owner: "typelevel", name: "cats") {
        ref(qualifiedName: "master") {
          target {
            ... on Commit {
              history(first: 10) {
                pageInfo {
                  hasNextPage
                  endCursor
                }
                edges {
                  node {
                    oid
                    messageHeadline
                  }
                }
              }
            }
          }
        }
      }
    }
    

    通过修改链接到Github Platform Community 上的this 查询。

    【讨论】:

    • 很好,可能比传递 id 更容易。 +1
    • 两个链接现在都变成了 404。
    • @LukAron 我猜这就是互联网。 Github 平台社区应该在某个地方:github.community 我想。我尝试在那里搜索以前的帖子,但找不到任何接近它的内容。
    【解决方案2】:

    在这种情况下使用history 会更好吗?

    this thread

    ref”(简称)是指向 git 提交的任何内容。这可能是本地分支、标签、远程分支等。因此,例如,master 将被视为参考。

    在这种情况下,您可以使用 Repository 类型上的 ref 字段来获取针对提交的引用。
    从该提交中,您可以获得该提交的所有父项。如果你的目标是master,你可以获得git仓库的主history

    query {
      node(id: "MDEwOlJlcG9zaXRvcnk4NDM5MTQ3") {
        ... on Repository {
          ref(qualifiedName: "master") {
            target {
              ... on Commit {
                id
                history(first: 30) {
                  totalCount
                  pageInfo {
                    hasNextPage
                  }
    
                  edges {
                    node {
                      oid
                      message
                      author {
                        name
                        email
                        date
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 有趣的语法!我不知道你能做到这一点。我不确定在这种情况下如何获取 master 的节点 ID?
    • @ssanj很多对象都有ID,docs.github.com/en/free-pro-team@latest/graphql/reference/…,任何实现节点接口的对象都会有ID,要找到你的对象的ID,你必须先找到它,除了ID,您可以使用一些键来查找它们,例如,要查找存储库,您可以使用起点 repository(owner: "typelevel", name: "cats"){ id } 进行查询,这样您就可以得到 ID
    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多