作者:红红的累累vdHRC_958 | 来源:互联网 | 2023-05-26 21:32
我正在尝试使用API 计算许多大型github存储库的提交,所以我想避免获取整个提交列表(这种方式作为示例:api.github.com/repos/jasonrudolph/keyboard/commits)和计数他们.
如果我有第一个(初始)提交的哈希值,我可以使用这种技术将第一个提交与最新提交进行比较,并愉快地报告两者之间的total_commits(所以我需要添加一个).不幸的是,我看不出如何使用API优雅地获得第一次提交.
基本的repo URL确实给了我created_at(这个url是一个例子:api.github.com/repos/jasonrudolph/keyboard),所以我可以通过限制提交到创建日期来获得减少的提交集(这个url是一个例子:api.github.com/repos/jasonrudolph/keyboard/commits?until=2013-03-30T16:01:43Z)并使用最早的一个(总是列在最后?)或者可能是空父母的一个(不确定分叉项目是否有初始父提交).
获得repo的第一个提交哈希的更好方法是什么?
更好的是,对于一个简单的统计来说,整个事情似乎很复杂,我想知道我是否遗漏了一些东西.使用API获取repo提交计数的任何更好的想法?
编辑:这个有点类似的问题是试图过滤某些文件("并在其中的特定文件."),所以有一个不同的答案.
1> Ivan Zuzak..:
如果您要查找默认分支中的提交总数,可以考虑采用不同的方法.
使用Repo Contributors API获取所有贡献者的列表:
https://developer.github.com/v3/repos/#list-contributors
列表中的每个项目都将包含一个contributions
字段,该字段告诉您用户在默认分支中创建了多少提交.在所有贡献者中对这些字段求和,您应该获得默认分支中的提交总数.
贡献者列表通常比提交列表短得多,因此应该花费更少的请求来计算默认分支中的提交总数.
GitHub为什么不将提交计数包括在API响应中?令人失望的是,必须不必要地遍历贡献者列表。
请注意,如果从您的存储库/组织/任何人中删除了任何用户(例如,一名雇员离开公司),此方法将返回错误的号码。
2> Bertrand Mar..:
您可以考虑使用GraphQL API v4使用别名对多个存储库同时执行提交计数。以下将获取3个不同存储库的所有分支的提交计数(每个存储库最多100个分支):
{
gson: repository(owner: "google", name: "gson") {
...RepoFragment
}
martian: repository(owner: "google", name: "martian") {
...RepoFragment
}
keyboard: repository(owner: "jasonrudolph", name: "keyboard") {
...RepoFragment
}
}
fragment RepoFragment on Repository {
name
refs(first: 100, refPrefix: "refs/heads/") {
edges {
node {
name
target {
... on Commit {
id
history(first: 0) {
totalCount
}
}
}
}
}
}
}
在资源管理器中尝试
RepoFragment
是一个片段,可帮助避免每个存储库的重复查询字段
如果只需要默认分支上的提交计数,则更加简单:
{
gson: repository(owner: "google", name: "gson") {
...RepoFragment
}
martian: repository(owner: "google", name: "martian") {
...RepoFragment
}
keyboard: repository(owner: "jasonrudolph", name: "keyboard") {
...RepoFragment
}
}
fragment RepoFragment on Repository {
name
defaultBranchRef {
name
target {
... on Commit {
id
history(first: 0) {
totalCount
}
}
}
}
}
在资源管理器中尝试