私はまったく同じ問題に遭遇しました。リポジトリ内のすべてのブランチのすべてのコミットを取得することができました (おそらくAPI のために効率的ではありません)。
リポジトリ内のすべてのブランチのすべてのコミットを取得するアプローチ
あなたが言ったように、最初にすべてのブランチを集めます:
# https://api.github.com/repos/:user/:repo/branches
https://api.github.com/repos/twitter/bootstrap/branches
見逃している重要な点は、コミットを取得するための APIv3 が参照コミット (リポジトリshaでコミットを一覧表示するための API 呼び出しのパラメーター) を使用して動作することです。そのため、ブランチを収集するときに、最新の 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 の操作
ここで 2 つのブランチが異なる 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/bootstrapのマスターブランチの最新の 100 件のコミットを一覧表示します。API を使用して、次の 100 件のコミットを取得するには、次のコミットの sha を指定する必要があります。次の API 呼び出しの入力として、最後のコミットの sha (現在の例では7a8d6b19767a92b1c4ea45d88d4eedc2b29bf1fa ) を使用できます。
# 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 の call sha パラメータと同じになるまで繰り返されます。
次のブランチ
これで 1 つのブランチは終了です。ここで、他のブランチに同じアプローチを適用します (最新の sha から作業します)。
このアプローチには大きな問題があります...ブランチはいくつかの同一のコミットを共有するため、別のブランチに移動すると、同じコミットが何度も何度も表示されます。
これを達成するためのはるかに効率的な方法があると想像できますが、これは私にとってはうまくいきました。