13

我正在使用 GraphQL 从使用 Github 的 GraphQL (v4) API 的存储库列表中获取一些数据。我想从存储库中获取最新提交的列表,无论提交的分支/标签/引用是什么。

现在我正在执行以下操作以从某个存储库获取提交列表:

... on Repository{
    refs(refPrefix:"refs/",orderBy:$refOrder,first:1){
        edges{
            node{
                ... on Ref{
                    target{
                        ... on Commit{
                            history(first:10){
                                totalCount
                                edges{
                                    node{
                                        ... on Commit{
                                            committedDate
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

$refOrder我与请求一起发送的对象在哪里,定义如下:

{
    "refOrder": {
        "direction": "DESC",
        "field": "TAG_COMMIT_DATE"
    }
}

这段代码正在工作,但没有检索到我想要的结果。响应返回一个提交列表,但不一定是存储库中的最后一次提交。当我转到存储库页面并单击“提交”时,我通常会看到一个提交列表,这些提交列表比我从 API 调用中获得的结果更新。

我错过了什么?我应该尝试不同的refPrefixorderBy论点吗?我已经尝试过将“master”作为refPrefix,但遇到了同样的问题。

4

2 回答 2

15

刚刚意识到我正在寻找的是一个存在于Repository名为defaultBranchRef. 使用这个字段,我能够检索到我正在寻找的数据。

我的查询现在看起来像这样:

... on Repository{
    defaultBranchRef{
        target{
            ... on Commit{
                history(first:10){
                    edges{
                        node{
                            ... on Commit{
                                committedDate
                            }
                        }
                    }
                }
            }
        }
    }
}
于 2018-01-16T16:53:44.730 回答
9

如果您也有兴趣获取所有分支(不仅仅是默认分支)的最新提交,您可以请求带前缀的参考refs/heads/

{
  repository(owner: "bertrandmartel", name: "callflow-workshop") {
    refs(refPrefix: "refs/heads/", orderBy: {direction: DESC, field: TAG_COMMIT_DATE}, first: 100) {
      edges {
        node {
          ... on Ref {
            name
            target {
              ... on Commit {
                history(first: 2) {
                  edges {
                    node {
                      ... on Commit {
                        committedDate
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

在您的情况下,使用refs/也给了您标签参考。

在资源管理器中尝试

于 2018-01-16T22:26:56.303 回答