GitHub CLI 之 gh 命令
摘要
- 本文写 GitHub 官方命令行
gh的安装、登录,以及仓库、Pull Request、Issue、Release 和 Actions 的日常用法。本文按gh2.102.0 来写。 - Git 本身的安装和提交、分支、推送见 Git安装和常用命令(最新)。命令速查见 Git常用命令(快查手册)。
- GitHub CLI 手册,cli/cli 仓库。
gh 的安装、登录,以及仓库、Pull Request、Issue、Release 和 Actions 的日常用法。本文按 gh 2.102.0 来写。opencode-llm-proxy。本文按插件 1.11.2、OpenCode 2.1.2 来写。127.0.0.1:4010 提供 OpenAI、Anthropic、Gemini 兼容接口,模型用的是 OpenCode 里已经登录或配置好的那些。vX.Y.Z 标签、推上去,再等 GitHub Actions 跑完 npm publish。npm publish 由该项目的 GitHub Actions 通过 npm Trusted Publishing 完成。url / sha256,再把 formula 提交进 Tap。sha256 要等 tag 到达 GitHub 之后才能算。脚本写进项目里的 .formula,再复制到 Tap 并在 Tap 仓库提交。Homebrew 读的是 Tap 里的那份。.formula 不进项目仓库。1.x 的安装和基本用法见 opencode的安装和使用。
把已经接好的模型暴露成本地 OpenAI 兼容接口,见 用 opencode-llm-proxy 把模型接到本地 OpenAI 接口。
本文写 OpenCode 2.x 的安装、从 1.x 升级,以及升级后配置和日常命令的写法。2.x 文档以英文为准。
sources.conf 登记之后,用同样的 port install 安装。file://,放在带 [default] 的那一行前面,并加上 [nosync]。Portfile 放在 分类/名字/Portfile。改完在仓库根目录执行 portindex。color_echo 1.0.0 作例子。源码是 GitHub tag v1.0.0 的归档,命令文件在 bin/color_echo。安装和日常命令见 MacOS软件包管理器--MacPorts。没有 brew tap 这种命令,个人仓库是一份 Git 上的 ports 树,别人克隆后写进自己的 sources.conf。sources.conf 里的默认行是 ports.tar.gz,不是指南旧示例里的 ports.tar。brew install、brew upgrade 下载很慢或中途断开时,可以自己把同一个安装包下完,放到 Homebrew 这次要读的缓存文件上,再重新执行原来的命令。下面用本机升级 gh 2.102.0 作例子。Homebrew 7.0.8,缓存目录是 ~/Library/Caches/Homebrew。这次 GitHub 上的源码包下到一半就断了:curl: (18) Transferred a partial file。brew --cache --build-from-source gh 的输出为准,不能自己编哈希,也不能拷进 $(brew --cellar)/gh。gh 2.102.0 在当前 API 里没有 bottle,所以这次下的就是源码包 https://github.com/cli/cli/archive/refs/tags/v2.102.0.tar.gz,校验和是 08bf0ef8b4409893889175e0f5279d30d6edd96465816042c0d7c72eac598158。本机缓存文件名是 downloads/838ae966d01d820dbc2c41ab1f82d72064fe030ca19254fb2ff3aa993768b18d--cli-2.102.0.tar.gz。前半段是这条 URL 的 SHA-256,后半段来自下载响应里的文件名。brew upgrade gh 或 brew install gh。Homebrew 会接着做自己的校验和编译。缓存和 Cellar 的差别见 MacOS软件包管理器--brew。brew --cache --cask <token>,放进去的是这个 cask 的 url 指向的那个文件。本机 Firefox 是 dmg,codex 是 tar.gz,claude-code 没有后缀。例子在文末。15.8.1-x86_64。7.0.8 不再为 Intel Mac 提供 cmake 的 bottle,brew upgrade cmake 会从源码执行 ./bootstrap。cmake 4.4.4 停在 Cannot find a C++ compiler that supports both C++11。cmake 的软件包。直接升级或安装 cmake,以及任何要在本机编译 cmake 的 formula,都会停在同一处。这次是升级 wget 时把它作为依赖编出来的。/usr/bin/clang++ 是 Apple Clang 17.0.0,clang++ --version 正常,CC、CXX、CXXFLAGS 都没有设置。用一段 C++11 程序编译,报错是 fatal error: 'iostream' file not found。iostream 在各个 SDK 里都有,例如 /Library/Developer/CommandLineTools/SDKs/MacOSX26.2.sdk/usr/include/c++/v1/iostream。编译器实际搜索的是 /Library/Developer/CommandLineTools/usr/include/c++/v1。这条路径按编译器自己的位置计算:InstalledDir 是 CommandLineTools/usr/bin,libc++ 头文件放在它的上一级 usr/include/c++/v1。这个目录还在,里面没有 iostream。目录一旦存在,驱动就只用它,不再把 SDK 里的那份加入搜索路径。c++.backup 之后,同一段 C++11 程序可以编译并输出 123,再执行 brew upgrade cmake。git、wget、nginx。角色和 MacOS软件包管理器--brew 相同,默认目录是 /opt/local,可以和 Homebrew 装在同一台机器上。+ / - 选择。日常命令是 port,改动系统的操作要加 sudo。自己编写 Portfile 并在本机安装,见 MacPorts -- 创建自己的 Port。brew 装好的软件不会自动搬过来,要在 MacPorts 里重新装。15-Sequoia 的 pkg。brew 用 formula 从源码(或 bottle)安装软件,用 cask 安装已经打好的成品。成品常见是 .app / .pkg,也可以只是一个命令行二进制,不一定非要是 GUI。
本文介绍如何在 macos 下创建自己的 Cask,和 brew -- 创建自己的 Formula 是一对:那篇讲 Formula,这篇讲 Cask。
本文基于 MacOS 15.x,brew 版本为 Homebrew 7.0.4。
关于 brew 的安装及使用可以参考 MacOS软件包管理器--brew