在使用 Homebrew 安装软件时,经常会遇到类似:

brew tap xxx/yyy
brew install xxx/yyy/software

最开始接触时产生过几个疑惑:Tap 是什么,为什么安装某些软件需要 tap,tap 后需要切换回来吗,可以 untap 吗,tap 和软件源有什么区别。

本文整理 Homebrew Tap 的概念和使用方式。关于 Homebrew 的基础用法,见 Homebrew:MacOS 上的软件包管理

什么是 Homebrew Tap?

Tap 是 Homebrew 的扩展软件仓库。

默认情况下,Homebrew 只知道官方维护的软件仓库 homebrew/corehomebrew/cask,里面包含大量常用软件(git、python、node、wget 等)。

但不是所有软件都会进入官方仓库。一些公司、组织或个人会维护自己的 Homebrew 仓库,这些额外仓库就是 Tap。

例如 Hashicorp 维护的 hashicorp/tap 包含 terraform、vault、packer、consul 等。

Tap 的本质

可以把 Tap 理解为给 Homebrew 增加一个额外的软件目录。

默认状态下 Homebrew 只有 homebrew/core。执行 brew tap hashicorp/tap 之后,Homebrew 就知道除了官方仓库,还可以去 Hashicorp 的仓库寻找软件。

为什么某些软件需要 tap?

因为这些软件没有放在 Homebrew 官方仓库里。

brew install terraform  # 官方仓库没有 → 失败

Hashicorp 提供了自己的仓库 hashicorp/homebrew-tap,所以需要先 brew tap hashicorp/tap,然后再安装。

brew tap hashicorp/tap
brew install terraform
# 或直接指定来源
brew install hashicorp/tap/terraform

Tap 不是切换源

这是最容易误解的地方。Tap 不是更换 Homebrew 镜像、切换软件源或替换官方仓库——只是添加一个新的软件仓库,扩展 Homebrew 可搜索的软件范围。

执行 brew tap oven-sh/bun 后,原来的 brew install git 依然来自 homebrew/core,不会受影响。

常用操作

查看当前有哪些 Tap:

brew tap

添加 Tap:

brew tap 用户名/仓库名

安装 Tap 中的软件,可以指定 Tap 路径,也可以直接安装让 Homebrew 搜索所有已添加的 Tap:

brew install hashicorp/tap/terraform
brew install terraform  # Homebrew 搜索已添加的 Tap

关于 Untap

如果某个 Tap 不再使用、已废弃或软件已迁移,可以删除:

brew untap 用户名/仓库名

Untap 不会删除已安装的软件——已安装的 terraform 依然存在,只是后续 brew upgrade 不会再从该 Tap 获取更新。如果以后需要,重新 brew tap 即可恢复。

查看某个软件来自哪个 Tap:

brew info 软件名

Tap 与软件源的区别

对比Tap软件源
本质软件仓库下载服务器
作用增加软件目录提供软件包
是否替换默认可能
是否影响已有软件可能
是否永久存在根据配置
是否可以删除brew untap根据工具

日常使用建议

保持官方 Tap(homebrew/corehomebrew/cask)不要删除。

官方文档要求 tap 时直接执行即可,不用担心。安装后不需要立即 untap,保留即可——未来 brew upgrade 可能需要该 Tap 更新软件。

定期 brew tap 查看,如果发现有已废弃或不再使用的,再 brew untap

总结

Homebrew Tap 就是给 Homebrew 添加额外的软件仓库,让 Homebrew 能安装官方仓库之外的软件。

核心命令:

brew tap           # 查看
brew tap user/repo # 添加
brew untap user/repo # 删除
brew info package  # 查看来源
  • Tap ≠ 软件源切换
  • Tap 不需要安装后恢复
  • Untap 不会删除已安装软件
  • 大多数情况下,让 Tap 保留即可