Referência
Política de interatividade
gh já faz a coisa certa em contextos não TTY: ele pula o pager,
remove cores ANSI e falha rapidamente com uma mensagem útil em vez de
solicitar (ex.: must provide --title and --body when not running interactively).
Você não precisa definir defensivamente GH_PAGER ou passar --no-pager (tal flag
não existe).
Analisando JSON
A saída humana do gh é formatada em colunas. Se você quiser dados estruturados:
- Adicione
--json field1,field2,...para saída estruturada. - Execute um comando com
--jsone sem lista de campos para imprimir o conjunto completo de campos disponíveis, então escolha o que precisar. - Use
--jq '<expr>'para filtrar sem usar pipe em umjqseparado. - Use
--template '<go-template>'(junto com--json) quando quiser saída de texto formatada. Observe que--template/-Tcolide com uma flag de template de corpo em alguns comandos (ex.:gh pr create -T,gh issue create -T); sempre verifique--helpantes de assumir qual você está usando.
Paginação e truncamento silencioso
Comandos de lista limitam os resultados.
gh issue list,gh pr list,gh search ...: passe-L N(--limit N). O padrão é geralmente 30.gh issue list/gh pr listnão expõem totais agregados comototalCountvia--json. Se você precisar de um total real, usegh api graphqlpara consultartotalCount; caso contrário, trate-Lcomo o limite para a chamada atual.- Para chamadas de API brutas use
gh api --paginate <caminho>. Combine com--jqe (opcionalmente)--slurppara montar um array.
Direcionamento de repositório
gh infere o repositório a partir dos remotes git do diretório atual.
Passe --repo OWNER/REPO (-R) para substituir o repositório resolvido do CWD.
Busca vs listagem
gh search issues|prs|code|repos|commits|usersusa o índice de busca do GitHub e aceita a sintaxe de busca completa (is:open,author:,label:,repo:owner/name,in:title, ...). Passe a consulta inteira como uma string entre aspas, da mesma forma que faria para--search:gh search issues "is:open author:foo repo:cli/cli". Prefira-o para qualquer coisa entre repositórios ou filtrada por autor/label.gh issue list --search "..."egh pr list --search "..."aceitam a mesma sintaxe, mas são limitados a um repositório.
Recorra a gh api para qualquer coisa que --json não exponha
Às vezes, dados úteis não estão nos comandos tipados. Exemplos:
- Comentários de thread de revisão em um PR:
gh api repos/{owner}/{repo}/pulls/{n}/comments(a flag--commentsemgh pr viewmostra apenas comentários no nível da issue). - GraphQL arbitrário:
gh api graphql -f query='...' -F var=value. - Atalhos REST:
gh api repos/{owner}/{repo}/...- note que o placeholder{owner}/{repo}é preenchido para você quando executado em um repositório com remotes detectados; passe-os literalmente se quiser determinismo.
Autenticação
gh auth statusimprime o(s) host(s) ativo(s), usuário e qual variável de ambiente (se houver) está sendo respeitada.gh auth status --jsoné suportado.
Outras notas
gh pr checkout <n>troca de branch. Usegh pr diff <n>ough pr view <n>se você só precisar ler.NO_COLOR,CLICOLOR_FORCEeGH_FORCE_TTYsão respeitados. DefinaGH_FORCE_TTY=1se quiser saída no estilo TTY (cores, tabelas, pager, interatividade) dentro de um agente; deixe sem definir a menos que necessário.