【问题标题】:How to retrieve list of 1000 plus repoistories in a GitHub org using GitHub API如何使用 GitHub API 在 GitHub 组织中检索 1000 多个存储库的列表
【发布时间】:2021-04-26 07:01:36
【问题描述】:

我正在使用以下脚本在我的一个 GitHub Enterprise 组织中生成一个存储库列表,它运行良好;但是,默认情况下,它一次只能获取 100 个 repos。

如何修改它以生成整个列表?我的 GitHub 组织中有大约 2000 个存储库。

curl --silent --user "myusername:mypassword" "https://github.***.com/api/v3/orgs/myorg/repos?page=1&per_page=2000" | npx jq '.[].clone_url' | while read repo
do
    repo="${repo%\"}"
    repo="${repo#\"}"
    echo "$repo"
done > repolist.txt

我无法在此处调整 page=*&per_page=*,无论我使用什么数字组合,当我执行上述 shell 脚本时,都会生成一个名为 repolist.txt 的文件,其中包含 GitHub org 中前 100 个 repos 的列表。

【问题讨论】:

  • 旁注:使用jq -r 抑制输出中的双引号
  • 感谢本杰明的提示。我在回答中添加了-r

标签: shell github github-api


【解决方案1】:

来自docs

您可以指定要接收的物品数量(最多 100 个);

You can go to /orgs/{org} and read public_repos

使用此值,您可以创建 total_pages=$(($public_repos / 100 + 1)) 并在 total_pages 中迭代,增加您的 page 属性。

下面是一个小代码,只需添加您的凭据和组织名称:

#!/bin/bash

user=""
password=""
org=""
public_repos=$(curl -s -u "${user}:${password}" "https://api.github.com/orgs/${org}" | jq .public_repos)
per_page=100
total_pages=$(($public_repos / $per_page + 1))

for page in $(seq 1 $total_pages); do
  curl -s -u "${user}:${password}"\
    "https://api.github.com/orgs/${org}/repos?page=${page}&per_page=${per_page}" | \
    jq -r '.[].clone_url'
done

【讨论】:

  • 那么我应该在 page=1&per_page=2000" 中更改什么以通过单次执行我的 shell 脚本来检索 2000 个 repos 列表
  • 谢谢威尔顿。现在我能够使用 >> repolist.txt 重定向输出,并且对于 2000 年 repos 必须运行脚本 20 次 eact 时间,页码为 1 然后 2 然后 3 依此类推,per_page=100 因为每页最大允许是 100。
  • 我添加了一个代码来迭代您的全部存储库,而无需重新运行您的程序。
  • 谢谢威尔顿。但是当我执行它时,它给了我以下错误解析错误:第 1 行第 16 列的无效数字文字:第 8 行:/100 + 1:语法错误:预期操作数(错误标记为“/100 + 1”)
  • 我的错误看起来像是我搞砸了 github url。它现在为我工作。但我只能在该组织中检索公共回购。我们可以为所有回购做吗?
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2021-01-24
  • 2018-12-05
  • 2020-10-24
  • 2021-02-01
  • 2016-01-24
  • 2012-02-01
相关资源
最近更新 更多