Taps 是 Homebrew 公式、Cask 和/或外部命令的外部來源。任何人都可以建立 Tap,以提供自己的公式、Cask 和/或外部命令給任何 Homebrew 使用者。
Tap 通常是線上可用的 Git 儲存庫,但只要是 Git 理解的協定,或甚至只是包含檔案的目錄,你都可以使用任何東西。如果託管在 GitHub 上,我們建議儲存庫名稱以 homebrew-
開頭,這樣就可以使用簡短的 brew tap
命令。請參閱 brew
手冊頁面,以取得更多關於儲存庫命名的資訊。
可以使用 brew tap-new
命令建立新的 Tap,並附帶一些範本檔案。
Tap 公式遵循與核心相同的格式,而且可以新增在 Formula
子目錄、HomebrewFormula
子目錄或儲存庫的根目錄下。會使用第一個可用的目錄,其他位置將會被忽略。我們建議使用子目錄,因為這樣可以讓儲存庫組織更容易理解,而且頂層檔案不會與公式混在一起。
請參閱 homebrew/core,以取得包含 Formula
子目錄的 Tap 範例。
如果您的 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
檔案。
若要在不同時安裝任何公式的情況下安裝您的 tap,使用者可以使用 brew tap
命令 來新增它。如果在 GitHub 上,他們可以使用 brew tap user/repo
,其中 user
是您的 GitHub 使用者名稱,而 homebrew-repo
是您的儲存庫。如果它託管在 GitHub 外部,他們必須使用 brew tap user/repo <URL>
,其中 user
和 repo
將用於參考您的 tap,而 <URL>
是您的 Git clone URL。
然後,使用者可以使用 brew install foo
安裝您的公式(如果沒有同名的核心公式),或使用 brew install user/repo/foo
來避免衝突。
tap 僅是一個 Git 儲存庫,因此在進行修改時,除了提交和推送您的變更之外,您不必執行任何特定操作。
安裝您的 tap 後,每當使用者執行 brew update
時,Homebrew 都會更新它。與核心公式一樣,當使用者執行 brew upgrade
時,過時的公式將會升級。
也可以從 tap 安裝 Casks。Casks 可以包含在有公式的 tap 中,或在只有 Casks 的 tap 中。將您希望提供的任何 Cask 檔案放在 tap 頂層的 Casks
目錄中。
請參閱 homebrew/cask,了解包含 Casks
子目錄的 tap 範例。
與配方不同,cask 必須具有全球唯一的名稱,以避免衝突。例如,可以透過在 cask 名稱前面加上您的 github 使用者名稱來達成:username-formula-name
。
您可以透過在 cmd
子目錄中新增自訂 brew
指令,提供給您的 tap 使用者。 深入了解外部指令。
請參閱 homebrew/aliases,了解包含外部指令的 tap 範例。
有些上游軟體供應商喜歡將他們的軟體打包在他們自己的 Homebrew tap 中。當他們的軟體 符合 Homebrew/homebrew-core 的資格 時,我們偏好在那裡維護軟體,以方便更新、提升可發現性,並使用 formulae.brew.sh 等工具。
我們不願意移除 Homebrew/homebrew-core 中已打包的軟體,以支持上游 tap。我們不願意在我們的配方中指示使用者改用您的配方。如果上游專案對於 Homebrew 如何打包您的軟體有問題:請提出問題(或理想情況下,提出 pull request)來解決這些問題。
商業開放原始碼對於「維持控制」的需求日益增加,例如明確定義要傳送給使用者的二進位檔為何。不支援使用者(甚至軟體發行版)從原始碼建置,與開放原始碼的價值觀背道而馳。如果您認為 Homebrew 在這方面的觀點令人厭煩:請嘗試了解 Debian 如何回應傳送您的二進位檔的要求。