我们的 Github 帐户中维护着大量的存储库。有没有办法检索所有默认且只有主分支的存储库
您可以编写脚本并检查默认分支。例如:
$ curl -s 'https://api.github.com/users/<username>/repos?per_page=1000' | grep 'default_branch'
"default_branch": "master"
# ..
# ..
# ..
这将打印默认分支名称。然后,您可以仅过滤掉相关的存储库并获得类似以下内容:
repos=$(...)
echo "$repos" | while read line ; do
git clone "$line"
done
每当在 GitHub 上执行大型查询时,GitHub GraphQL API 都是一个不错的选择。
这个要点说明了如何获取存储库的所有分支。
您可以将其嵌套在另一个 GraphQL 查询中,它将获取组织内的所有存储库。
(未经测试:只是为了提供一个想法:可以在 GraphQL Explorer 中进行调整)
query getCommitsByBranchByRepo($org:String!, $repo:String!) {
organization(login:$org) {
name
repository(name:$repo) {
name
refs(refPrefix: "refs/heads/", first: 10) {
edges {
node {
branchName:name
}
}
pageInfo {
endCursor #use this value to paginate through repos with more than 100 branches
}
}
}
}
这个想法是要执行一个客户端查询,而不是可能执行大量
curl
,这可能会触发 GitHub 从一个 IP 接受的 HTTP 请求数量的限制。
(为像我这样的未来读者发布替代答案:)
gh
CLI 可以让您轻松获得这些内容。例如:
gh repo list <username> --json defaultBranchRef,url --no-archived --source
该命令将返回
<username>
拥有的存储库列表,这些存储库不是分叉 (--source
) 且未存档 (--no-archived
),并且它将包括默认分支名称 (defaultBranchRef
) 和存储库的 URL (url
) 在 JSON 响应中。
示例响应(但
<username>
将是您在命令中输入的任何内容):
[
{
"defaultBranchRef": {
"name": "master"
},
"url": "https://github.com/<username>/some-repo"
},
{
"defaultBranchRef": {
"name": "main"
},
"url": "https://github.com/<username>/some-other-repo"
}
]
注意:这只会告诉您默认分支,而不会告诉您是否还有其他分支。从你的问题中我不确定这对你是否有用。