homebrew/core 使用特殊命名格式來支援多個版本的公式。例如,GCC 6 的公式命名為 gcc@6.rb
,並以 class GccAT6 < Formula
開頭。
我們包含在 homebrew/core 中的版本化公式必須符合以下標準
formula2
,而非 formula@2
或 formula@1
)。openssl@1.0
和 foo
,而 foo
依賴於 openssl
,則您必須改用 openssl
。keg_only :versioned_formula
,以允許使用者一次安裝多個版本。keg_only :versioned_formula
不應在 HOMEBREW_PREFIX
中post_install
任何與主要對應項(或其他版本化公式)衝突或重複的內容。例如,node@6
公式不應將其 npm
安裝到 HOMEBREW_PREFIX
,就像 node
公式所做的那樣。install_on_request
公式 中的那些公式。resource
。例如,node@6
公式不應具有 npm
資源,而應依賴上游 tarball 所提供的 npm
。revision
升級,才能針對較新的版本進行重新建置。違反此規定的版本更新應予拒絕,並從該時點起將公式標示為已棄用。不應使用 Homebrew 的版本來將公式「固定」到您的個人需求。您應為您或您的組織希望控制其版本的公式,或不符合上述標準的公式,建立您自己的 tap。定期發布 API 或 ABI 中斷版本的軟體仍須符合上述所有需求;brew upgrade
對您造成某些中斷並非我們為您新增和維護公式的理由。
如果目前在 Homebrew/homebrew-core 儲存庫中存在公式,或過去曾存在(即已移轉或刪除),您可以使用 brew extract
指令將其復原供您自己使用。這會將公式的所需版本複製到自訂 tap。例如,如果您的專案依賴 automake
1.12,而非最新版本,您可以透過執行下列指令取得版本 1.12 的 automake
公式:
brew extract automake --version=1.12 <YOUR_GITHUB_USER>/<YOUR_TAP_REPOSITORY_NAME>
透過此方式取得的公式可能包含已棄用、已停用或已移除的 Homebrew 語法(例如,檢查碼可能是 sha1
,而非 sha256
);brew extract
指令不會編輯或更新公式,以符合目前的標準和樣式需求。
我們可能會暫時在 homebrew/core 中新增不符合這些標準的版本化公式,以滿足我們自己的需求。在其中存在版本化公式並不表示它會被無限期地維護,或表示我們願意接受任何不符合上述需求的版本。