如何列出GitHub组织下的所有GitHub Pages页面?
列出GitHub组织下所有GitHub Pages站点的方法
命令行快速实现(用gh CLI + jq)
GitHub官方的gh CLI和图形界面确实没有直接列出组织所有Pages的功能,但可以借助GitHub API来实现。先确保你已经通过gh auth login完成认证,然后替换命令里的ORG_NAME为你的组织名称:
基础版(输出仓库地址和Pages API地址)
gh api --paginate /orgs/ORG_NAME/repos --jq '.[] | select(.has_pages == true) | .html_url, .pages_url'
进阶版(直接显示Pages访问域名)
如果想直接看到可访问的Pages站点地址,包括自定义域名,可以用:
gh api --paginate /orgs/ORG_NAME/repos --jq '.[] | select(.has_pages == true) | .html_url + " -> " + (.pages["html_url"] // "'"$(gh api user | jq -r '.login')"'.github.io/" + .name)'
这个命令会自动处理没有自定义域名的情况,显示默认的用户名.github.io/仓库名格式地址。
自定义脚本实现(更灵活)
如果需要导出为CSV或者做更多过滤,可以写个简单的Python脚本(需要安装requests库):
import requests import os # 替换为你的组织名称 ORG_NAME = "你的组织名称" # 从环境变量读取GitHub Token,或者直接写在这里(不推荐) GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") headers = {"Authorization": f"token {GITHUB_TOKEN}"} all_repos = [] next_url = f"https://api.github.com/orgs/{ORG_NAME}/repos?per_page=100" # 分页获取组织下所有仓库 while next_url: resp = requests.get(next_url, headers=headers) all_repos.extend(resp.json()) next_url = resp.links.get("next", {}).get("url") # 筛选并获取Pages信息 for repo in all_repos: if repo.get("has_pages"): pages_resp = requests.get(repo["pages_url"], headers=headers) pages_data = pages_resp.json() # 优先取自定义域名,没有则用默认地址 pages_url = pages_data.get("html_url", f"{repo['owner']['login']}.github.io/{repo['name']}") print(f"仓库: {repo['name']}") print(f"仓库地址: {repo['html_url']}") print(f"Pages访问地址: {pages_url}\n")
补充说明
GitHub的GUI和gh CLI没有提供这个功能的原因是,Pages是绑定到单个仓库的功能,组织层面没有统一的Pages管理入口,所以只能通过API批量遍历仓库来筛选。
内容的提问来源于stack exchange,提问作者Chen Tian
相关产品推荐
相关产品推荐

