如何测量从 Git 存储库推送之前的提交数?

How do I measure the number of commits before a push from a Git repository?

我正在开发一个工具来收集 Git 存储库的指标。我试图弄清楚如何计算推送中的提交次数,这样我就可以说 "for repository x, an average of y commits are made before a push"。在这种情况下,可以忽略合并提交。我尝试使用 libgit2 进行此操作但没有成功,因为我不相信 Git 本身会将此信息存储在其对象数据库中。

尽管看起来 GitHub 可以推断出何时进行了推送,所以这一定是可能的。 GitHub 在主页上显示提交者的最近提交列表(对于您所属的组织和您关注的人),并在将提交推到一起时显示为压缩在一起。

如何使用 GitHub API 或其他一些库获取此信息?

为了确定给定推送中的提交数量,您需要获取存储库的 PushEvents 流。

您需要轮询 repository events 端点并过滤 PushEvents 的响应。 PushEvent 的有效负载中有一个 size 属性。那应该告诉您在该事件中推送了多少次提交。如果它已被删除(没有被记录为已删除),那么您应该能够确定 commits 属性的长度,因为它是代表每个提交的对象集合。例如,如果您在 JavaScript 中执行此操作,则可以在 Python 中执行 payload.commits.lengthlen(payload['commits'])

针对特定库的建议超出了 Whosebug 问题的范围,因此我不会为您回答。