如何通过GraphQL搜索GitHub仓库并获取提交总数?字段设计疑问
嘿,这个问题提得特别好!我来帮你拆解清楚这两个点:
用GraphQL搜索GitHub仓库并获取提交总数
GitHub的GraphQL API并没有在Repository对象上直接提供提交总数的字段——这是因为一个仓库可能有多个分支,每个分支的提交历史都是独立的。要拿到提交总数,你需要指定具体的分支(比如仓库的默认分支),然后通过该分支的提交历史来统计总数。
下面是一个完整的查询示例,它会搜索你指定的仓库,并返回默认分支的提交总数:
query SearchRepositories($searchQuery: String!) { search(query: $searchQuery, type: REPOSITORY, first: 10) { nodes { ... on Repository { name owner { login } # 获取仓库的默认分支 defaultBranchRef { target { # 分支指向的是Commit对象,通过它的history获取提交总数 ... on Commit { history { totalCount } } } } } } } }
你可以传入查询变量,比如{"searchQuery": "repo:vuejs/vue"},这样就能获取Vue仓库默认分支的提交总数了。如果仓库的默认分支不是main或master也没关系,defaultBranchRef会自动指向仓库设置的默认分支。
为什么仓库字段有提交评论总数却没有提交总数?
这个疑惑完全合理!这其实是GitHub API的设计逻辑决定的:
- 提交评论总数(
commitComments.totalCount):这是针对整个仓库所有提交的评论统计,不管这些提交属于哪个分支,它是一个仓库级别的聚合数据,所以直接放在Repository对象下是合理的。 - 提交总数:提交是和分支强绑定的——不同分支的提交历史是完全独立的(比如你在feature分支的提交不会出现在main分支的历史里),而且合并分支后,提交的归属也会变得复杂,根本不存在一个“仓库全局的提交总数”。所以GitHub没有在
Repository对象上提供这个字段,而是让你通过具体分支的history.totalCount来获取对应分支的提交数,这样反而更灵活,你可以拿到任意分支的提交数量。
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

