告别~!烦人的 homebrew 强制更新
Homebrew 使用中的“踩坑”和“填坑”经验总结!
1. Homebrew 自动更新问题
问题:执行 brew install 或 upgrade 时,Homebrew 强制运行 update,耗费时间。
解决方案(按推荐程度排序):
-
导出环境变量(推荐): 在 ~/.zshrc 或 ~/.bashrc 中添加:
bash
export HOMEBREW_NO_AUTO_UPDATE=1
全局禁用自动更新,需手动运行 brew update 检查更新。
-
使用 alias: 在 ~/.zshrc 或 ~/.bashrc 中添加:
bash
alias brew="HOMEBREW_NO_AUTO_UPDATE=1 brew"
效果同上,但仅对 brew 命令生效。
-
单次禁用: 临时禁用自动更新:
bash
HOMEBREW_NO_AUTO_UPDATE=1 brew install <formula>
-
使用 Homebrew/aliases:
bash
brew alias install_no_autoupdate='!HOMEBREW_NO_AUTO_UPDATE=1 brew install'
然后用 brew install_no_autoupdate 替代 brew install。
补充:
- 禁用自动更新后,需定期手动运行 brew update 以确保获取最新公式。
- 如果需要临时启用自动更新,可运行 unset HOMEBREW_NO_AUTO_UPDATE。
- Cask 和 App Store 应用混淆问题
问题:Cask 和 App Store 都将应用安装到 /Applications,导致:
- 无法区分安装来源。
- 同一应用可能被覆盖。
解决方案:
-
设置 Cask 安装路径: 在 ~/.zshrc 或 ~/.bashrc 中添加:
bash
export HOMEBREW_CASK_OPTS="--appdir=~/Applications/_"
Cask 应用将安装到 ~/Applications/_/,与 /Applications 分离。
作者的应用管理建议:
- App Store:安装到 /Applications。
- Cask:安装到 ~/Applications/_/。
- 破解应用:安装到 ~/Applications/#/。
- JetBrains IDE:通过 JetBrains Toolbox 管理(Toolbox 本身用 Cask 安装)。
- 开源/免费应用:安装到 ~/Applications。
补充:
-
确保 ~/Applications/_ 和 ~/Applications/# 目录存在,可手动创建:
bash
mkdir -p ~/Applications/_ ~/Applications/#
-
为避免权限问题,检查目录权限:
bash
chmod -R u+rwX ~/Applications
- Cask 批量更新问题
问题:老脚本不再适用,需更高效的 Cask 应用更新方式。
解决方案:
-
安装 cask-upgrade:
bash
brew tap buo/cask-upgrade
-
使用命令:
-
更新所有可更新的应用:
bash
brew cu
-
更新特定应用:
bash
brew cu <app>
-
常用选项:
- -a:包含自动更新的应用。
- -f:强制更新版本号为 latest 的应用。
- -y:自动确认所有更新提示。
-
补充:
-
运行 brew cu 前,建议先运行 brew update 确保 Cask 仓库最新。
-
如果遇到更新失败,可尝试单独更新应用并检查日志:
bash
brew cu <app> --verbose
- 国内网络导致 Homebrew 速度慢
问题:brew update 和 brew install 因网络问题速度慢。
解决方案:
-
换源(推荐):
-
参考清华镜像源指南:
-
brew update 慢:替换 Homebrew 核心仓库源。
-
brew install 慢:替换 Homebrew Bottles 源。
-
配置步骤(以清华源为例):
bash
# 替换 core 仓库 git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git git -C "$(brew --repo homebrew/cask)" remote unstoppable https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git # 替换 Bottles 源 echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.zshrc source ~/.zshrc
-
清华源地址:mirrors.tuna.tsinghua.edu.cn.
-
-
其他可选源:中科大、阿里云等。
-
-
代理:
-
设置代理(替换为自己的代理地址和端口):
bash
export all_proxy=socks5://<host>:<port>
-
适用于有稳定代理的用户,速度通常更快。
-
补充:
-
换源后首次运行 brew update 可能较慢,后续会显著提升。
-
若源失效,可切换回官方源:
bash
git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew.git
-
代理设置可能影响其他工具,完成后可取消:
bash
unset all_proxy
- SHA256/Checksum 不匹配问题
问题:
- Error: SHA256 mismatch(brew)或 Error: Checksum mismatch(cask),因仓库校验值与实际文件不一致。
解决方案:
-
清理缓存(优先尝试):
bash
rm -rf ~/Library/Caches/Homebrew brew install <formula/app>
适用于发行者未更新版本号但修改了文件的情况。
-
手动修改校验值(若缓存清理无效):
-
Brew:
-
编辑公式文件:
bash
nano /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/<formula>.rb
-
将 sha256 值替换为实际文件的校验值(可通过 shasum -a 256 获取)。
-
-
Cask:
-
编辑 Cask 文件:
bash
nano /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/<app>.rb
-
更新 sha256 值。
-
-
保存后重新运行 brew install 或 brew cask install。
-
-
注意事项:
-
禁用自动更新:防止修改被覆盖:
bash
export HOMEBREW_NO_AUTO_UPDATE=1
-
保留编辑器:安装成功后撤销修改(避免 Git 冲突)。
-
恢复仓库(若冲突):
bash
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core git reset --hard cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask git reset --hard
-
补充:
-
计算实际文件校验值:
bash
shasum -a 256 /path/to/downloaded/file
-
若问题反复出现,检查是否为网络问题导致文件下载不完整,可尝试代理或换源。
-
长期修改校验值不推荐,可能影响安全性,建议向 Homebrew 仓库提交 issue。
常见问题解答
-
如何恢复 Homebrew 默认设置?
-
移除自定义环境变量:
bash
unset HOMEBREW_NO_AUTO_UPDATE unset HOMEBREW_CASK_OPTS unset HOMEBREW_BOTTLE_DOMAIN
-
重置仓库:
bash
brew update-reset
-
-
如何检查 Homebrew 健康状态?
bash
brew doctor
按提示修复问题。
-
Cask 已被废弃,如何处理?
- 自 Homebrew 2.6.0(2020年12月)起,Cask 已整合到 Homebrew,无需单独安装。
- 旧命令 brew cask install 自动转为 brew install --cask 。
- 更新脚本或命令以兼容新语法。
总结
Homebrew 在 macOS 环境下的常见问题及解决方案,涵盖自动更新、Cask 管理、网络优化和校验错误等。推荐优先使用环境变量方式禁用自动更新、配置清华源提升速度,并通过 cask-upgrade 简化 Cask 应用管理。对于校验问题,清理缓存是首选,手动修改需谨慎操作。