获取GitHub仓库中文件的所有提交

时间:2018-04-13 19:01:22

标签: github-api

如果我使用以下网址,

https://api.github.com/repos/raspberrypi/linux/commits?path=drivers/gpu/drm/i915/intel_display.c

我得到了前30个提交。但该文件有大约3000次提交。如何获得此文件的所有提交?

2 个答案:

答案 0 :(得分:1)

您可以查询与给定文件关联的所有提交:

var stats = new Dictionary<string, int>();

foreach (var path in allPaths)
{
    var request = new CommitRequest { Path = "path/to/file.cs" };
    var commitsForFile = await client.Repository.Commit.GetAll(Owner, Name, request);
    stats.Add(path, commitsForFile.Length);
}

此代码使用由GitHub正式维护和支持的Octokit。所有Octokit库都是在MIT许可下发布的,这意味着它们可以在任何项目中进行修改和使用。

取自 - https://github.com/octokit/octokit.net/issues/1293

答案 1 :(得分:1)

在GitHub API文档中查看Pagination之后,我最终做了类似下面的代码。但是,您必须小心所讨论的API请求率here

import requests
import json

url = 'https://api.github.com/repos/raspberrypi/linux/commits?access_token=<your github user OAuth token>&path=drivers/gpu/drm/i915/intel_display.c'
commits = []

i = 1
r = requests.get(url + '&per_page=100&page=' + str(i))
while len(r.json()) != 0:
    commits.extend(r.json())
    i += 1
    r = requests.get(url + '&per_page=100&page=' + str(i))

with open('commits.txt', 'w') as outfile:
    json.dump(commits, outfile)