gpt4 book ai didi

github-api - GitHub API : Retrieve all commits for all branches for a repo

转载 作者:行者123 更新时间:2023-12-03 07:38:33 24 4
gpt4 key购买 nike

根据 V2 文档,您可以使用以下命令列出分支的所有提交:

commits/list/:user_id/:repository/:branch

我在 V3 文档中没有看到相同的功能。

我想使用以下方式收集所有分支:

https://api.github.com/repos/:user/:repo/branches

然后迭代它们,拉取每个的所有提交。或者,如果有一种方法可以直接提取存储库的所有分支的所有提交,那么即使不是更好,也同样有效。有任何想法吗?

更新:我尝试将分支 :sha 作为参数传递,如下所示:

params = {:page => 1, :per_page => 100, :sha => b}

问题是,当我这样做时,它无法正确对结果进行分页。我觉得我们处理这个问题的方式是错误的。有什么想法吗?

最佳答案

我也遇到了完全相同的问题。我确实设法获取了存储库中所有分支的所有提交(由于 API 的原因,可能效率)。

检索存储库中所有分支的所有提交的方法

正如您所提到的,首先收集所有分支:

# https://api.github.com/repos/:user/:repo/branches
https://api.github.com/repos/twitter/bootstrap/branches

您缺少的关键是用于获取提交的 APIv3 使用引用提交(用于列出存储库上的提交的 API 调用的参数sha)进行操作。因此,您需要确保在收集分支时也获取了它们的最新 sha:

针对 twitter/bootstrap 的分支 API 调用的修剪结果

[
{
"commit": {
"url": "https://api.github.com/repos/twitter/bootstrap/commits/8b19016c3bec59acb74d95a50efce70af2117382",
"sha": "8b19016c3bec59acb74d95a50efce70af2117382"
},
"name": "gh-pages"
},
{
"commit": {
"url": "https://api.github.com/repos/twitter/bootstrap/commits/d335adf644b213a5ebc9cee3f37f781ad55194ef",
"sha": "d335adf644b213a5ebc9cee3f37f781ad55194ef"
},
"name": "master"
}
]

使用上次提交的 sha

因此,正如我们看到这里的两个分支具有不同的 sha,这些是这些分支上的最新提交 sha。您现在可以做的是从最新的 sha 迭代每个分支:

# With sha parameter of the branch's lastest sha
# https://api.github.com/repos/:user/:repo/commits
https://api.github.com/repos/twitter/bootstrap/commits?per_page=100&sha=d335adf644b213a5ebc9cee3f37f781ad55194ef

因此,上述 API 调用将列出 twitter/bootstrapmaster 分支的最后 100 次提交。使用 API 时,您必须指定下一次提交的 sha 才能获取接下来的 100 次提交。我们可以使用上次提交的 sha(在当前示例中为 7a8d6b19767a92b1c4ea45d88d4eedc2b29bf1fa)作为下一个 API 调用的输入:

# Next API call for commits (use the last commit's sha)
# https://api.github.com/repos/:user/:repo/commits
https://api.github.com/repos/twitter/bootstrap/commits?per_page=100&sha=7a8d6b19767a92b1c4ea45d88d4eedc2b29bf1fa

重复此过程,直到最后一次提交的 sha 与 API 的调用 sha 参数相同。

下一个分支

这就是一个分支的内容。现在,您对另一个分支应用相同的方法(从最新的 sha 开始工作)。

<小时/>

这种方法存在一个大问题...由于分支共享一些相同的提交,当您移动到另一个分支时,您将一遍又一遍地看到相同的提交。

我可以想象有一种更有效的方法来完成此任务,但这对我有用。

关于github-api - GitHub API : Retrieve all commits for all branches for a repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com