我尝试构建一个GraphQL查询来检索给定仓库(无论分支如何)的所有提交,使用GitHub的v4 GraphQL API。以
1. 使用此查询检索仓库的所有分支列表(必要时使用
对我来说,这个解决方案是低效的,特别是因为第二步。在第二步中,大多数提交将在许多分支之间重复(更不用说我必须做很多查询才能从一个分支中获取所有提交了)。一旦我获得来自每个分支的提交列表,我必须对它们进行去重。整个过程需要进行很多,很多次查询和大量的重复努力。但是,由于有些提交只能通过某些分支到达,我认为除了详尽地查询每个分支,别无他法。 有人能建议更有效的策略,更好地利用GitHub的GraphQL API来检索存储库中的所有提交吗? 谢谢! P.S. 供参考,我查看了以下问题,但似乎没有回答我的问题:
a. Github GraphQL-获取存储库的提交列表-他们只想从存储库的默认分支获取最新的
b. 使用graphql从github获取提交统计信息 -这个问题只关心默认分支,可能不包括所有提交。
c. 使用GitHub GraphQL API v4在单个存储库中查询所有提交 -仅关心
github/training-kit
仓库为例,我目前需要按以下步骤进行操作:1. 使用此查询检索仓库的所有分支列表(必要时使用
pageInfo
重复查询以获取所有分支):{
repository(owner: "github", name: "training-kit") {
refs(first: 10, refPrefix: "refs/heads/", after: "") {
totalCount
edges {
node {
name
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
- 遍历分支列表,对于每个分支获取其提交历史记录。在每个分支内部,通常需要多次运行查询,因为存在分页限制。例如,这是获取
master
分支前100个提交的查询:
{
repository(owner: "github", name: "training-kit") {
refs(query: "master", refPrefix: "refs/heads/", first: 1) {
nodes {
target {
... on Commit {
history(first: 100) {
nodes {
oid
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
}
}
}
}
对我来说,这个解决方案是低效的,特别是因为第二步。在第二步中,大多数提交将在许多分支之间重复(更不用说我必须做很多查询才能从一个分支中获取所有提交了)。一旦我获得来自每个分支的提交列表,我必须对它们进行去重。整个过程需要进行很多,很多次查询和大量的重复努力。但是,由于有些提交只能通过某些分支到达,我认为除了详尽地查询每个分支,别无他法。 有人能建议更有效的策略,更好地利用GitHub的GraphQL API来检索存储库中的所有提交吗? 谢谢! P.S. 供参考,我查看了以下问题,但似乎没有回答我的问题:
a. Github GraphQL-获取存储库的提交列表-他们只想从存储库的默认分支获取最新的
n
个提交,而不是所有分支的提交。b. 使用graphql从github获取提交统计信息 -这个问题只关心默认分支,可能不包括所有提交。
c. 使用GitHub GraphQL API v4在单个存储库中查询所有提交 -仅关心
master
分支以及如何进行分页,而不是存储库的所有提交。