如何获取GitHub仓库的历史月度贡献者总数及指定仓库的月度Used by与贡献者统计数据?
获取GitHub仓库月度历史统计数据的可行方案
针对你的两个问题,我整理了几个实用的方法,能避开Wayback Machine的局限性:
一、获取过去x个月/年内每月的总贡献者历史统计
GitHub没有直接提供月度贡献者历史的API端点,但我们可以通过分析提交记录来推导,具体步骤如下:
- 核心思路:抓取仓库的所有提交记录,按月份分组,提取每个月内有提交行为的唯一用户ID,统计去重后的数量就是当月的贡献者总数。
- 实现方式:
- 使用GitHub官方CLI工具
gh或者直接调用REST API获取提交列表。比如用gh api repos/pytorch/pytorch/commits --per-page 100批量拉取提交(注意处理分页逻辑)。 - 编写脚本(比如Python、JavaScript)遍历所有提交,提取每个提交的
author.login字段,按「年份+月份」进行分组。 - 对每个月份的用户列表去重,得到当月的贡献者数量。
- 如果只需要最近x个月的数据,可以在API请求中添加
since和until参数过滤时间范围,减少数据处理量。
- 使用GitHub官方CLI工具
示例Python代码片段(使用PyGitHub库):
from github import Github from collections import defaultdict from datetime import datetime # 替换为你的GitHub访问令牌 g = Github("your_access_token") repo = g.get_repo("pytorch/pytorch") # 筛选2023年全年的提交 commits = repo.get_commits(since=datetime(2023, 1, 1), until=datetime(2024, 1, 1)) monthly_contributors = defaultdict(set) for commit in commits: if commit.author: month_key = commit.commit.author.date.strftime("%Y-%m") monthly_contributors[month_key].add(commit.author.login) # 输出每月贡献者统计 for month, users in monthly_contributors.items(): print(f"{month}: {len(users)} 位贡献者")
二、获取Used by和贡献者数量的月度历史数据
仓库右侧的Used by对应的是依赖该仓库的公开仓库数量,贡献者数量是所有提交过代码的用户总数。由于GitHub不提供这些指标的历史快照,你可以通过以下机制积累数据:
1. 定期抓取并本地存储
这是最可靠的方案,具体操作:
- 使用GitHub GraphQL API查询当前的指标值:
- 贡献者总数:查询
repository.contributors.totalCount - Used by数量:查询
repository.repositoriesDependentsCount
- 贡献者总数:查询
- 编写定时任务(比如用Linux cron、GitHub Actions),每月执行一次查询,将结果存储到数据库(比如SQLite、PostgreSQL)或者CSV文件中。
- 积累几个月后,你就有了完整的月度历史数据。
示例GraphQL查询语句:
query { repository(owner: "pytorch", name: "pytorch") { contributors(first: 1) { totalCount } repositoriesDependentsCount } }
2. 分析GitHub Archive事件数据
GitHub Archive会记录GitHub上的所有公开事件(比如push、仓库创建、依赖添加等)。你可以下载对应时间段的归档数据,通过分析:
- Push事件来统计每月的贡献者(和第一个问题的思路类似)
- 依赖相关的事件(比如
created或updated依赖)来估算Used by数量的变化
不过这种方法需要处理大量原始数据,适合有数据处理经验的开发者。
3. 借助专业的仓库分析工具
有些专注于GitHub生态的分析工具会长期跟踪仓库的关键指标(包括贡献者、依赖数量),并提供历史数据查询功能。你可以寻找这类工具来获取现成的历史统计,无需自己维护抓取任务。
内容的提问来源于stack exchange,提问作者Christopher




