Tap 是 Homebrew 公式、Cask 和/或外部命令的外部来源。任何人都可以创建 Tap,以便向任何 Homebrew 用户提供其自己的公式、Cask 和/或外部命令。
Tap 通常是可在线获取的 Git 存储库,但只要是 Git 理解的协议,甚至只是包含文件的目录,你都可以使用任何东西。如果托管在 GitHub 上,我们建议存储库名称以 homebrew-
开头,以便可以使用简短的 brew tap
命令。有关存储库命名的更多信息,请参阅 brew
手册页。
可以使用 brew tap-new
命令来创建新的 Tap 以及一些模板文件。
Tap 公式遵循与核心公式相同的格式,并且可以添加到 Formula
子目录、HomebrewFormula
子目录或存储库根目录下。将使用第一个可用的目录,其他位置将被忽略。我们建议使用子目录,因为它使存储库组织更容易理解,并且顶级文件不会与公式混在一起。
有关包含 Formula
子目录的 Tap 示例,请参阅 homebrew/core。
如果你的 Tap 中的公式与 Homebrew/homebrew-core 公式同名,则无法并排安装它们。如果你希望创建 Homebrew/homebrew-core 中公式的不同版本(例如,带有 option
),请考虑为其提供不同的名称;例如,对于功能更全面的 nginx
公式,使用 nginx-full
。这将允许同时安装 nginx
和 nginx-full
(假设一个 keg_only
或链接的文件不冲突)。
如果在 GitHub 上,用户可以使用 brew install user/repo/formula
安装你的任何公式。在安装公式之前,Homebrew 会自动添加你的 github.com/user/homebrew-repo
Tap。 user/repo/formula
指向此处的 github.com/user/homebrew-repo/**/formula.rb
文件。
要安装水龙头而无需同时安装任何配方,用户可以使用 brew tap
命令 添加水龙头。如果在 GitHub 上,他们可以使用 brew tap user/repo
,其中 user
是你的 GitHub 用户名,homebrew-repo
是你的存储库。如果在 GitHub 外部托管,他们必须使用 brew tap user/repo <URL>
,其中 user
和 repo
将用于引用你的水龙头,<URL>
是你的 Git 克隆 URL。
然后,用户可以使用 brew install foo
(如果不存在同名的核心配方)或 brew install user/repo/foo
(以避免冲突)安装你的配方。
水龙头只是一个 Git 存储库,因此除了提交和推送更改之外,你在进行修改时不必执行任何特定操作。
安装水龙头后,Homebrew 将在用户每次运行 brew update
时更新水龙头。当用户运行 brew upgrade
时,过时的配方将被升级,就像核心配方一样。
木桶也可以从水龙头安装。木桶可以包含在带有配方的水龙头中,也可以包含在仅带有木桶的水龙头中。将你希望提供的任何木桶文件放在水龙头的顶层 Casks
目录中。
请参阅 homebrew/cask,了解带有 Casks
子目录的水龙头的示例。
与配方不同,木桶必须具有全局唯一名称以避免冲突。可以通过例如在木桶名称前加上你的 github 用户名来实现此目的:username-formula-name
。
你可以通过在 cmd
子目录中添加自定义 brew
命令,为你的水龙头用户提供这些命令。 阅读有关外部命令的更多信息。
请参阅 homebrew/aliases,了解带有外部命令的水龙头的示例。
一些上游软件提供商喜欢将他们的软件打包到他们自己的 Homebrew tap 中。当他们的软件 符合 Homebrew/homebrew-core 时,我们更愿意在那里维护软件,以便于更新、提高可发现性并使用诸如 formulae.brew.sh 等工具。
我们不愿意删除 Homebrew/homebrew-core 中打包的软件,转而使用上游 tap。我们不愿意在我们的配方中指导用户使用你的配方。如果上游项目对 Homebrew 如何打包你的软件有疑问:请提交问题(或者理想情况下,提交拉取请求)来解决这些问题。
商业开源中越来越希望“保持控制”,例如明确定义向用户运送哪些二进制文件。不支持用户(甚至软件发行版)从源代码构建与开源的价值观背道而驰。如果你认为 Homebrew 在这一点上的观点很烦人:试试看 Debian 如何回应运送你的二进制文件的请求。