识别所有只有主分支的存储库

问题描述 投票:0回答:3

我们的 Github 帐户中维护着大量的存储库。有没有办法检索所有默认且只有主分支的存储库

git github
3个回答
1
投票

您可以编写脚本并检查默认分支。例如:

$ 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

1
投票

每当在 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 请求数量的限制。


0
投票

(为像我这样的未来读者发布替代答案:)

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"
  }
]

注意:这只会告诉您默认分支,而不会告诉您是否还有其他分支。从你的问题中我不确定这对你是否有用。

© www.soinside.com 2019 - 2024. All rights reserved.