如何通过GitHub API列出组织的私有存储库?

67

我正在尝试获取组织的所有存储库列表,包括私有存储库。 (更具体地说,是某个用户可以访问的所有私有存储库。)

请求组织信息(https://api.github.com/orgs/acme?access_token=[...])显示确实存在大量私有存储库:


请求组织信息(https://api.github.com/orgs/acme?access_token=[...])显示确实存在着很多私人存储库:
...
"public_repos": 5,
"total_private_repos": 68, 
"owned_private_repos": 68, 
...

我正在使用的访问令牌是之前使用API(在此处生成)时生成的,使用的是用户名/密码。

但无论我尝试列出哪些存储库...

https://api.github.com/orgs/acme/repos?access_token=[...]   

GitHub API 只返回 5 个公共存储库。 (文档指出type=all是默认的。还尝试添加参数type=private;没有区别。)

你有什么想法吗?

生成访问令牌的用户实际上只能访问组织中的一些私人存储库,但我获取到的列表中没有这些存储库 (只有 5 个公共存储库)。


3
你正在做的一切看起来都很好。也许联系GitHub客服会是个好主意:support@github.com。不过有一件事——在创建OAuth令牌时你定义了哪些作用域? - Ivan Zuzak
3
@IvanZuzak:啊,我没有注意到你在创建令牌时指定了范围……我使用的是一个 Python 示例脚本(http://agrimmsreality.blogspot.co.uk/2012/05/sampling-github-api-v3-in-python.html),其中使用了“public_repo”范围。因此,通过创建具有“repo”范围的新令牌,我使它工作了。谢谢!您能把这也加入回答中吗,这样我就可以接受它了吗? - Jonik
1
很酷,我很高兴为您解决了问题。下面写了一个简短的答案。干杯! - Ivan Zuzak
6
除了以上内容外,如果您的组织有超过30个仓库,您需要使用“&page=2”参数翻页查看数据。 - Aaron Hoffman
6
您可以使用"&per_page=100"参数一次检索更多的结果。 - Aaron Hoffman
9个回答

37

你所做的一切都很好。但是,当创建OAuth令牌进行身份验证时,请确保您定义了正确的范围。每个范围定义了一组特定的允许操作(可以读取/写入的信息),因此您应该检查您是否使用repo范围创建了令牌。


8

5
应该注意的是,如果您从组织中访问私有存储库,则OAuth应用程序需要根据设置获得所有者的授权。

https://help.github.com/articles/authorizing-oauth-apps/

对于有 OAuth 应用访问限制的组织,您可以请求组织管理员批准该应用在该组织中使用。如果组织不批准该应用,则该应用只能访问该组织的公共资源。如果您是组织管理员,您可以自己批准该应用。
对于没有 OAuth 应用访问限制的组织,该应用程序将自动获得授权以访问该组织的资源。因此,您应该谨慎选择哪些 OAuth 应用程序批准访问您的个人帐户资源以及任何组织资源。

3
username = "Your_org"
token = "your_TOKEN"
request = requests.get('https://api.github.com/orgs/'+username+'/repos?per_page=1000', auth=(username, token))

每页的最大值为100。 - drhagen

2

您可以使用gh命令https://cli.github.com/

gh repo list <org name> -L <total number of repos> --json sshUrl -q .[].sshUrl

要查看json字段列表,请运行gh repo list --json help。 如果您只想查看公共或私有存储库,则可以使用这些标志

FLAGS
      --archived          Show only archived repositories
      --no-archived       Omit archived repositories
      --private           Show only private repositories
      --public            Show only public repositories

2

最近我出现了相同的症状,但原因不同。我注册了一个GitHub应用程序,而不是OAuth应用程序,没有真正意识到它们之间的区别。要让GitHub应用程序列出组织中的私有存储库,该应用程序必须安装在该组织中,并得到用户的授权。否则,您只会列出公共存储库。


请问您能否详细说明一下?我在使用GitHub应用程序获取私有存储库时遇到了问题。 - angel_dust
当您在GitHub上注册应用程序时,可以创建OAuth应用程序或GitHub应用程序。如果您尝试使用OAuth API,则需要注册OAuth应用程序,但默认似乎是GitHub应用程序,您需要知道这不是您想要的。 - Tom
这里的关键区别在于,OAuth应用程序是由个人用户授权代表他们执行操作的;GitHub应用程序需要被组织安装和授权才能访问私有内容。 - Tom

0

2022年的答案:

## List all repos ( private, internal, public )

curl "https://api.github.com/orgs/foobar-org/repos" \
     -u 'username:<personal access token>'

GitHub API 参考文档 在这里


0

使用最新的GitHub CLI gh 2.28.0,在2023年得出答案:

gh repo list --json visibility,name --jq 'group_by(.visibility) | .[] | "\(.[0].visibility | ascii_upcase):", (.[] | .name), ""'

PR 7337 添加了 visibility JSON 字段。

为了可读性,分成多行:

gh repo list --json visibility,name \
   --jq 'group_by(.visibility) | .[] | "\(.[0].visibility | ascii_upcase):", (.[] | .name), ""'

jq 过滤器包括:

  • group_by(.visibility):按可见性属性(包括公共、私有和内部)对存储库进行分组。
  • .[]:遍历每个组。
  • "\(.[0].visibility | ascii_upcase):":输出大写的可见性值,后跟冒号。
  • (.[] | .name):输出组中每个存储库的名称。
  • "":在每个组之后输出一个空行。

此命令将以纯文本列表的形式输出结果,并在每个组之间输出一个空行,如下所示:

PUBLIC:
repo1
repo2

PRIVATE:
repo3
repo4

INTERNAL:
repo5

-1
# Get Github Repo Names

"""
>>>> pip install PyGithub
>>>> Reference Link: https://pypi.org/project/PyGithub/
>>>> Getting the access token.
        Go to github <settings>.
        Go to <Developer Settings>.
        Go to <Personal access tokens>.
        Click on <Generate new token> button.
        Add a note.
        Check all the setting in that page.
        Click on <Generate token> button.
        Copy  the access token and paste in below code.

>>>>
>>>>
>>>>
>>>>
"""

from github import Github

access_token = ''
g = Github(access_token)
repo_list = [i for i in g.get_user().get_repos()]
for i in repo_list:
    repo_name = str(i).replace('Repository(full_name="', '')
    repo_name = str(repo_name).replace('")', '')
    print('https://www.github.com/' + repo_name)

1
这里有两个问题:(1)代码没有注释,(2)代码列出了用户的存储库,而不是问题所要求的组织的存储库。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接