如何创建和维护 Tap

Tap 是 Homebrew 公式、Cask 和/或外部命令的外部来源。任何人都可以创建 Tap,以便向任何 Homebrew 用户提供其自己的公式、Cask 和/或外部命令。

创建 Tap

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。这将允许同时安装 nginxnginx-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>,其中 userrepo 将用于引用你的水龙头,<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 如何回应运送你的二进制文件的请求。

Fork me on GitHub