旧版本 homebrew 采用 git 管理,随着时间推移,git 仓库规模越来越大,目前 core/cask 的 .git 目录加起来已经超过 1G 大小。

homebrew 从 3.5 开始提供新的 API 方式,一个仓库只使用一个 json 文件,用户只需更新这个 json 文件。4.0 开始这种方式成为默认。但是一直使用旧版用户仍需手动切换一下。

自 brew 4.0 起,HOMEBREW_INSTALL_FROM_API 会成为默认行为,无需设置;大部分用户无需再克隆 homebrew/core 仓库,故无需设置 HOMEBREW_CORE_GIT_REMOTE 环境变量。但若需要运行 brew 的开发命令或者 brew 安装在非官方支持的默认 prefix 位置,则仍需设置 HOMEBREW_CORE_GIT_REMOTE 环境变量。

首先设置环境变量:

1
2
3
4
5
6
export HOMEBREW_INSTALL_FROM_API=1
export HOMEBREW_API_DOMAIN="https://mirrors.bfsu.edu.cn/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.bfsu.edu.cn/homebrew-bottles"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.bfsu.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.bfsu.edu.cn/git/homebrew/homebrew-core.git"
export HOMEBREW_PIP_INDEX_URL="https://mirrors.bfsu.edu.cn/pypi/web/simple"

注:这里使用了北京外国语大学开源镜像。网上文章大多是使用清华大学镜像,但是由于使用人数过多,负载太高,近期故障频发。清华大学开源镜像团队与北外合作开设新的镜像站,目前速度较快也较稳定,推荐使用。

但是除 core/cask 以外的仓库仍然需要使用 git。

1
2
3
4
for tap in core cask{,-fonts,-drivers,-versions} command-not-found; do
    brew tap --custom-remote --force-auto-update "homebrew/${tap}" "https://mirrors.bfsu.edu.cn/git/homebrew/homebrew-${tap}.git"
done
brew update

屏幕输出如下

1
2
==> Downloading https://formulae.brew.sh/api/formula.json                                                                    
==> Downloading https://formulae.brew.sh/api/cask.json

core/cask git 库可以删除了。

1
2
brew untap homebrew/core
brew untap homebrew/cask