5.2 自更新应用、--greedy 与 --adopt
2 分钟阅读
原文链接: https://docs.brew.sh/FAQ
自更新应用带来的问题
很多 macOS 应用会在 Homebrew 之外自行更新,例如浏览器、聊天工具等。应用自己的更新器可能让“Homebrew 的记录”比“实际安装的应用”更旧。如果 brew 盲目按记录覆盖安装,反而可能把应用降级。
为此,会自更新的 cask 在定义中声明 auto_updates true。对于安装了可读 app bundle 的版本化 cask,Homebrew 会比较 app bundle 的版本元数据与 cask 当前版本:
- 应用看起来更旧 → 默认
brew upgrade会包含该 cask; - 应用看起来同版本或更新 → 默认跳过;
- 无法可靠比较(或使用
version :latest的 cask)→ 普通brew upgrade跳过,避免瞎猜。
强制 Homebrew 也更新它们:–greedy
| |
--greedy 是范围最大的选项,会把默认检查跳过的自更新 cask 与 version :latest cask 一并纳入。更精确的选项:
| |
对于 version :latest 的 cask,brew 会重新下载当前产物,并在可能时把 SHA-256 与安装时记录比对;文件没变则跳过重装。
还可以用环境变量让某些策略持久生效:
| |
如果只想彻底退出自更新 cask 的自动升级:
| |
该设置不影响显式 --greedy/--greedy-auto-updates 的升级。
Dock 位置与权限设置丢失问题
用 brew upgrade 更新 cask 应用时,Homebrew 有两种策略:
- 卸载旧版并重装新版:macOS 会认为应用被删除,于是移除 Dock/Launchpad 位置、权限等内部元数据;
- 原地替换内容:把升级当作应用原位升级,保留上述设置。
Homebrew 在拥有必要权限时默认采用原地替换。从 macOS Ventura 开始,执行原地升级要求运行 Homebrew 的终端应用获得“App 管理”或“完全磁盘访问权限”中的一种。若你在升级后丢失 Dock 顺序或权限设置,请在“系统设置 → 隐私与安全性”中授予终端相应权限后重试。
把已手动安装的应用“收养”进 brew:–adopt
如果某应用你早就从官网手动装好了,现在想让它进入 brew 的管理范围(例如为了统一升级和 Brewfile 快照),不要先卸载再安装,直接收养:
| |
输出会显示 “Adopting existing App at ‘/Applications/TextMate.app’”,之后该应用就由 cask 记录管理。
提示:收养前建议先备份或确认版本匹配。完整示例见官方 Tips and Tricks 页面。