4.2 更新、升级与版本固定

原文链接: https://docs.brew.sh/FAQ

更新软件定义:brew update

Homebrew 是滚动发布(rolling release)的包管理器。软件“配方”更新与软件本体升级是两件事。先更新所有 formula 定义以及 Homebrew 自身:

1
brew update

查看过期软件:brew outdated

1
brew outdated

列出你已安装但已有新版本的软件包(keg)。

升级:brew upgrade

升级所有软件:

1
brew upgrade

只升级某一个 formula:

1
brew upgrade <formula>

为什么一次 upgrade 会连带升级很多软件

Homebrew 不支持随意混搭 formula 的不同版本。某个 formula 依赖的一切,以及反过来依赖它的软件,都必须升级到 Homebrew 官方测试过的最新版本组合。因此一次 brew upgrade <formula> 或 brew install <formula> 常常会顺带升级很多看似无关的 formula——尤其是 python、openssl 这类底层软件需要升级时。

阻止某个软件更新:brew pin

如果不想让某个 formula/cask 被更新:

1
brew pin <formula_or_cask>

以后允许它再次更新:

1
brew unpin <formula_or_cask>

需要注意:

  • 被 pin 的 formula 若被其他 formula 依赖,当依赖方必须升级时仍会要求升级它——Homebrew 不允许基于旧版本构建 formula。如果这不是你想要的,参见官方 Locking installed formulae at specific versions;
  • pin 只作用于 brew upgrade;cask 应用自己的自动更新器仍可能绕过 Homebrew 更新它。

完全不自动更新

如果连“Homebrew 自动获知新版本”也想关闭,可在 shell 配置中设置:

1
export HOMEBREW_NO_AUTO_UPDATE=1

之后手动执行 brew update 即可获取更新。这个开关的取舍与替代方案,同样可以参考官方 Locking 文档。

升级的推荐流程

1
2
3
4
brew update
brew outdated
brew upgrade
brew cleanup

在大型升级前,先执行 brew outdated 看清单;升级后若出现异常,见 第 8 章。