我尝试使用API来计算许多大型githubrepos的提交次数,因此我希望避免获取整个提交列表(例如:api.github.com/repos/jasonrudolph/keyboard/commits)并对其进行计数。
如果我有第一次(初始)提交的哈希值,我可以use this technique to compare the first commit to the latest,它会很高兴地报告其间的total_commits(因此我需要添加一个)。不幸的是,我不知道如何使用API优雅地获得第一次提交。
基本的repo URL确实给予我created_at(这个URL是一个例子:api.github.com/repos/jasonrudolph/keyboard),所以我可以通过限制提交直到创建日期来得到一个缩减的提交集(这个url是一个例子:api.github.com/repos/jasonrudolph/keyboard/committs?until = 2013 - 03 - 30 T16:01:43 Z),并使用最早的一个(总是列在最后吗?),或者可能是父提交为空的那个(不确定派生的项目是否有初始父提交)。
有没有更好的方法来获取回购协议的第一个提交哈希值?
更好的是,对于一个简单的统计数据来说,这整件事似乎很复杂,我想知道我是否遗漏了什么。有没有更好的想法来使用API获得repo提交计数?
编辑:这个somewhat similar question试图按某些文件进行过滤(“并在其中过滤到特定文件”),所以答案不同。
9条答案
按热度按时间xqkwcwgp1#
您可以考虑使用GraphQL API v4来使用别名同时对多个仓库执行提交计数。以下代码将获取3个不同仓库的所有分支的提交计数(每个仓库最多100个分支):
Try it in the explorer
RepoFragment
是一个片段,有助于避免每个存储库的查询字段重复如果你只需要默认分支上的提交计数,那就更简单了:
Try it in the explorer
5m1hhzi42#
如果您要查找默认分支中的提交总数,您可以考虑一种不同的方法。
使用Repo Contributors API获取所有贡献者的列表:
https://developer.github.com/v3/repos/#list-contributors
列表中的每一项都包含一个
contributions
字段,它告诉你用户在默认分支中提交了多少次,把所有参与者的字段相加,你就得到了默认分支中提交的总数。贡献者列表通常比提交列表短得多,所以计算默认分支中的提交总数需要更少的请求。
2vuwiymt3#
简单解决方案:看看页码,Github会为你分页,所以你可以很容易地计算出提交次数,只需从Link头中获取最后一页的页码,减去1(你需要手动将最后一页相加),乘以页面大小,获取结果的最后一页,获取数组的大小,然后将两个数字相加。
下面是我在ruby中使用octokitgem获取整个组织提交总数的实现:
是的,我知道代码是脏的,这是几分钟内刚刚拼凑起来的。
ercv8c1e4#
如果你刚开始一个新项目,使用GraphQL API v4可能是解决这个问题的方法,但是如果你仍然使用REST API v3,你可以通过限制每页只能请求一个结果来解决分页问题,通过设置这个限制,最后一个链接返回的
pages
的数量将等于总数。例如,使用python3和requests库
8oomwypt5#
在
https://api.github.com/repos/{username}/{repo}/commits?sha={branch}&per_page=1&page=1
上提出请求现在只需要获取响应头的
Link
参数,并获取位于rel="last"
之前的页面计数这个页面计数等于该分支中的提交总数!
诀窍是使用**
&per_page=1&page=1
**。它在1页中分配1次提交。因此,提交的总数将等于总页数。sg3maiej6#
我只是做了一个小脚本来实现这个功能。它可能不适用于大型仓库,因为它不处理GitHub的速率限制。而且它需要Python requests包。
ds97pgxw7#
下面是一个基于snowe方法使用Fetch的JavaScript示例
获取示例
用法
bvuwiixz8#
我用python创建了一个生成器,它会返回一个贡献者列表,计算总提交次数,然后检查它是否有效。如果提交次数少于
True
,则返回False
。你唯一需要填写的是使用你的凭据的requests会话。下面是我为你写的内容:0vvn1miw9#
与Github企业版合作:
如果您是Unix管道的拥护者,您可以将其与存储库列表合并,以获取组织中的所有提交。
设置注解
对于Mac OS: