
先说说那个让人崩溃的场景
相信每个用 Mac 的开发者都经历过这个:
打开终端,敲下 brew install 某个包,然后......光标就在那里闪啊闪,进度条纹丝不动。
要么挂着梯子装,要么去网上搜"Homebrew 换源教程",然后面对一堆 git remote set-url、改环境变量的命令,手动复制粘贴,一不小心还容易敲错。
更麻烦的是------出差、回国、网络环境一变,又得再来一遍。
现有方案的问题
网上的换源教程大多是这个路子:
bash
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"' >> ~/.zshrc
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"' >> ~/.zshrc
source ~/.zshrc
每次换源要敲五六条命令,URL 又长又容易拼错。想换回官方源?再查一遍教程。
我用 Node.js 的时候有个工具叫 nrm,nrm use taobao 一条命令搞定切换,用起来很爽。Homebrew 为什么没有类似的东西?
于是我花了半天写了一个:brm
brm 是什么
Homebrew Registry Manager,像 nrm 管理 npm 源一样管理 Homebrew 镜像源。
核心就三个命令:
brm ls # 看看有哪些源可以选 brm use ustc # 切! brm info # 确认一下当前用的哪个 URL
切换完提示你执行一下 source ~/.zshrc,完事。
安装
bash
curl -fsSL https://gitee.com/philiam/brm/raw/main/install.sh | bash
使用

bash
brm ls # 列出所有可用源
brm use ustc # 切换到中科大镜像
brm info # 查看当前源的详细 URL
brm info tuna # 查看指定源的详细 URL
brm current # 查看当前源名称
切换后执行一次,使当前终端立即生效:
bash
source ~/.zshrc # zsh 用户
source ~/.bash_profile # bash 用户


可用源
| 名称 | 说明 |
|---|---|
official |
Homebrew 官方(GitHub) |
ustc |
中科大镜像 |
tuna |
清华镜像 |
bfsu |
北外镜像 |
aliyun |
阿里云镜像 |
原理
每次切换做三件事:
git remote set-url更新 Homebrew 本地仓库的 remote URL- 在 shell 配置文件(
.zshrc/.bash_profile)中写入HOMEBREW_BOTTLE_DOMAIN等环境变量 - 记录当前源到
~/.local/share/brm/current
环境变量块用 marker 包裹,切换时自动替换,不会重复追加:
bash
# >>> brm managed >>>
export HOMEBREW_BREW_GIT_REMOTE="..."
export HOMEBREW_BOTTLE_DOMAIN="..."
# <<< brm managed <<<
最后
工具目前内置了中科大、清华、北外、阿里云四个国内镜像,日常够用。
Gitee 地址:gitee.com/philiam/brm
欢迎 Star,也欢迎提 Issue 补充其他镜像源。