参考
交互策略
在非 TTY 上下文中,gh 已能正确处理:它会跳过翻页器、去除 ANSI 颜色,并在无法交互时快速报错并给出友好提示(例如“必须提供 --title 和 --body,因为当前不是交互模式”)。你无需防御性地设置 GH_PAGER 或传递 --no-pager(该标志不存在)。
解析 JSON
gh 的人类可读输出是列格式的。如果你需要结构化数据:
- 添加
--json field1,field2,...以获取结构化输出。 - 运行带有
--json且不指定字段列表的命令,可打印所有可用字段,然后选择你需要的字段。 - 使用
--jq '<expr>'进行过滤,无需通过独立的jq管道。 - 当你需要定制的文本输出时,使用
--template '<go-template>'(与--json一起使用)。注意,在少数命令(例如gh pr create -T、gh issue create -T)上,--template/-T会与 body-template 标志冲突;在假设使用哪个之前,请务必检查--help。
分页与静默截断
列表命令的结果有上限。
gh issue list、gh pr list、gh search ...:传递-L N(--limit N)。默认值通常是 30。gh issue list/gh pr list不会通过--json暴露聚合总数(如totalCount)。如果你需要真实总数,请使用gh api graphql查询totalCount;否则,将-L视为当前调用的上限。- 对于原始 API 调用,使用
gh api --paginate <path>。结合--jq和(可选)--slurp来组装一个数组。
仓库定位
gh 从当前工作目录的 Git 远程仓库推断出仓库。
传递 --repo OWNER/REPO(-R)可覆盖解析到的当前工作目录仓库。
搜索与列表
gh search issues|prs|code|repos|commits|users使用 GitHub 的搜索索引,并接受完整的搜索语法(is:open、author:、label:、repo:owner/name、in:title、...)。将整个查询作为一个带引号的字符串传递,与你在--search中的做法相同:gh search issues "is:open author:foo repo:cli/cli"。对于跨仓库或按作者/标签过滤的场景,优先使用它。gh issue list --search "..."和gh pr list --search "..."接受相同的语法,但范围限定在一个仓库内。
当 --json 无法暴露时,回退到 gh api
有时有用的数据不在类型化的命令中。例如:
- PR 上的讨论线程评论:
gh api repos/{owner}/{repo}/pulls/{n}/comments(gh pr view的--comments标志仅显示议题级别的评论)。 - 任意 GraphQL:
gh api graphql -f query='...' -F var=value。 - REST 快捷方式:
gh api repos/{owner}/{repo}/...- 注意,当从检测到远程仓库的目录运行时,{owner}/{repo}占位符会被自动填充;如果你想要确定性,请直接传递这些值。
身份验证
gh auth status打印活动的宿主、用户以及正在生效的环境变量(如果有)。gh auth status --json受支持。
其他说明
gh pr checkout <n>切换分支。如果你只需要读取,请使用gh pr diff <n>或gh pr view <n>。- 支持
NO_COLOR、CLICOLOR_FORCE和GH_FORCE_TTY。如果你希望在代理工具中获得 TTY 风格的输出(颜色、表格、翻页器、交互性),请设置GH_FORCE_TTY=1;否则保持未设置状态。