Homebrew安装特定版本的公式?

Posted

技术标签:

【中文标题】Homebrew安装特定版本的公式?【英文标题】:Homebrew install specific version of formula? 【发布时间】:2011-04-28 14:39:51 【问题描述】:

如何在自制软件中安装特定版本的公式?例如,postgresql-8.4.4 而不是最新的 9.0。

【问题讨论】:

postgresql 是一个奇怪的版本,因为它在 Homebrew 中有一个单独的版本,像 bash 这样的可能是一个更好的例子,因为它在同一个版本中从 4.x 变为 5.x公式名称。见***.com/a/55764594/3794873 通用formula reinstallation instructions. 我阅读了所有的答案。 现在是 2020 年,没有简单的方法或官方命令可以做到这一点 @oluckyman 没有简单的方法,因为这不是一个简单的问题。 Homebrew 要么支持旧版本(= 更多负担)要么不支持,你必须自己做。 UPD:已经是 2021 年了:) 【参考方案1】:

TLDR: brew install postgresql@8.4.4 更多详情请参见answer below。


*(我已经重新编辑了我的答案,以提供更彻底的工作流程来安装/使用带有自制软件的旧软件版本。如果您发现旧版本更好,请随时添加注释。 )

让我们从最简单的情况开始:

1) 检查,版本是否已经安装(但未激活)

当 Homebrew 安装一个新公式时,它会将它放在一个版本化目录中,例如 /usr/local/Cellar/postgresql/9.3.1。然后全局安装此文件夹的符号链接。原则上,这使得在两个已安装版本之间切换非常容易。 (*)

如果您使用自制软件的时间更长并且从未删除过旧版本(例如使用brew cleanup),那么您的程序的某些旧版本可能仍然存在。如果您只想激活之前的版本,brew switch 是最简单的方法。

检查brew info postgresql(或brew switch postgresql <TAB>)是否安装了旧版本:

$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M)
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more

我们看到已经安装了一些旧版本。我们可以使用brew switch激活它:

$ brew switch postgresql 9.1.5
Cleaning /usr/local/Cellar/postgresql/9.1.5
Cleaning /usr/local/Cellar/postgresql/9.3.2
384 links created for /usr/local/Cellar/postgresql/9.1.5

让我们仔细检查一下激活了什么:

$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M) *
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M)
  Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more

注意星号*已移至新激活的版本

(*) 请注意,brew switch 仅在旧版本的所有依赖项仍然存在时才有效。在某些情况下,可能需要重建旧版本。因此,当想要在两个相距不远的版本之间切换时,使用brew switch 非常有用。

2) 检查版本是否可以点击

特别是对于大型软件项目,很可能对某个软件的多个(可能与 API 不兼容的)主要版本有足够高的需求。截至 2012 年 3 月,Homebrew 0.9 为此提供了一种机制:brew tap 和 homebrew versions 存储库。

该版本存储库可能包含多个公式的旧版本的反向移植。 (大多数只有大的和著名的,但当然他们也会有几个用于 postgresql 的公式。)

brew search postgresql 会告诉你去哪里看:

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

我们可以简单地通过键入来安装它

$ brew install homebrew/versions/postgresql8
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 1563, done.
remote: Compressing objects: 100% (943/943), done.
remote: Total 1563 (delta 864), reused 1272 (delta 620)
Receiving objects: 100% (1563/1563), 422.83 KiB | 339.00 KiB/s, done.
Resolving deltas: 100% (864/864), done.
Checking connectivity... done.
Tapped 125 formula
==> Downloading http://ftp.postgresql.org/pub/source/v8.4.19/postgresql-8.4.19.tar.bz2
# …

请注意,这会自动轻按homebrew/versions。 (检查brew tap,删除brew untap homebrew/versions。)以下是等效的:

$ brew tap homebrew/versions
$ brew install postgresql8

只要向后移植的版本公式保持最新,这种方法可能是处理旧软件的最佳方法。

3) 尝试一些过去的公式

为了完整起见,主要列出了以下方法。两者都试图从 brew 存储库中复活一些不死公式。由于依赖项发生了变化、公式规范中的 API 发生了变化,或者只是下载 URL 发生了变化,事情可能会或可能不会起作用。

由于整个公式目录是一个 git 存储库,因此可以使用普通的 git 命令安装特定版本。但是,我们需要找到一种方法来获得旧版本可用的提交。

a) 历史时期

2011 年 8 月和 2014 年 10 月之间,自制软件有一个 brew versions 命令,它会吐出所有可用版本及其各自的 SHA 哈希值。自 2014 年 10 月起,您必须先注册 brew tap homebrew/boneyard,然后才能使用它。正如水龙头的名称所暗示的那样,您应该只在万不得已的情况下才这样做。

例如

$ brew versions postgresql
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
9.3.2    git checkout 3c86d2b Library/Formula/postgresql.rb
9.3.1    git checkout a267a3e Library/Formula/postgresql.rb
9.3.0    git checkout ae59e09 Library/Formula/postgresql.rb
9.2.4    git checkout e3ac215 Library/Formula/postgresql.rb
9.2.3    git checkout c80b37c Library/Formula/postgresql.rb
9.2.2    git checkout 9076baa Library/Formula/postgresql.rb
9.2.1    git checkout 5825f62 Library/Formula/postgresql.rb
9.2.0    git checkout 2f6cbc6 Library/Formula/postgresql.rb
9.1.5    git checkout 6b8d25f Library/Formula/postgresql.rb
9.1.4    git checkout c40c7bf Library/Formula/postgresql.rb
9.1.3    git checkout 05c7954 Library/Formula/postgresql.rb
9.1.2    git checkout dfcc838 Library/Formula/postgresql.rb
9.1.1    git checkout 4ef8fb0 Library/Formula/postgresql.rb
9.0.4    git checkout 2accac4 Library/Formula/postgresql.rb
9.0.3    git checkout b782d9d Library/Formula/postgresql.rb

如您所见,它建议不要使用它。 Homebrew 通过其内部启发式吐出它可以找到的所有版本,并向您展示一种检索旧公式的方法。让我们试试吧。

# First, go to the homebrew base directory
$ cd $( brew --prefix )
# Checkout some old formula
$ git checkout 6b8d25f Library/Formula/postgresql.rb
$ brew install postgresql
# … installing

现在安装了旧的 postgresql 版本,我们可以重新安装最新的公式以保持我们的存储库干净:

$ git checkout -- Library/Formula/postgresql.rb

brew switch是你在新旧之间转换的朋友。

b) 史前时代

如果有特殊需要,我们也可以尝试自己挖掘 homebrew repo。

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb

git log -S 查找在文件Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb 中添加或删除字符串'8.4.4' 的所有提交。结果我们得到了两次提交。

commit 7dc7ccef9e1ab7d2fc351d7935c96a0e0b031552
Author: Aku Kotkavuo
Date:   Sun Sep 19 18:03:41 2010 +0300

    Update PostgreSQL to 9.0.0.

    Signed-off-by: Adam Vandenberg

commit fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
Author: David Höppner
Date:   Sun May 16 12:35:18 2010 +0200

    postgresql: update version to 8.4.4

很明显,fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 是我们感兴趣的提交。由于这个提交已经很老了,我们将尝试降级完整的自制软件安装(这样,公式 API 或多或少保证有效) :

$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4

您可以跳过最后一条命令以将引用保存在您的 git 存储库中。

注意:签出旧提交时,您会暂时降级您的自制软件安装。因此,您应该小心,因为 homebrew 中的某些命令可能与最新版本不同。

4) 手动编写公式

It’s not too hard 然后您可以将其上传到您自己的存储库。以前是 Homebrew-Versions,但现在已停用。

A.) 奖励:固定

如果您想在执行自然的brew update; brew upgrade 过程时保留某个版本(例如 postgresql)并阻止其更新,您可以固定一个公式:

$ brew pin postgresql

固定公式列在/usr/local/Library/PinnedKegs/ 中,一旦您想引入最新的更改和更新,您可以再次取消固定

$ brew unpin postgresql

【讨论】:

您也可以使用git checkout fa992 -- Library/Formula/postgresql.rb 查看公式。完成后,您可以使用 git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb 撤消对公式的更改。 注意:在全新的 Homebrew 安装中,您可能需要 brew update 来建立其 Git 存储库。 这太难了。 截至今天,对仓库执行手动命令的正确目录是cd $(brew --repository)/Library/Taps/homebrew/homebrew-core,那么你可以使用git checkout 4cce79d -- Formula/go.rbHOMEBREW_NO_AUTO_UPDATE=1 brew install go 自制/版本已弃用【参考方案2】:

简单的工作流程

现在 Homebrew/versions 已被弃用,Homebrew/core 支持几个具有新命名格式的公式版本。

要安装特定版本,例如您只需运行 postgresql 9.5:

$ brew install postgresql@9.5

要列出可用版本,请使用 @: 进行搜索

$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ✔     postgresql@9.4        postgresql@9.5        postgresql@9.6

【讨论】:

看起来是最简单的,但是当我复制和粘贴时,得到fatal: Not a git repository (or any of the parent directories): .git。我只是 cd 进入目录而不是(没有 FORMULANAME.rb),然后执行 git checkout 120938 @RamonTayag,我遇到了同样的问题。请务必先cd /usr/local 我发现你需要一个步骤 3.5:brew unlink FORMULANAME brew versions <formula> 不再受支持。 @dem7w2,您可以使用brew link --force postgresql@9.5 创建符号链接。如果您已经安装了较新版本并希望将旧版本作为默认版本,那么您还需要一个 --overwrite【参考方案3】:

现在有一种更简单的方法来安装您之前安装的旧版本的公式。只需使用

brew switch [formula] [version]

例如,我经常在 Node.js 0.4.12 和 0.6.5 之间切换:

brew switch node 0.4.12
brew switch node 0.6.5

由于brew switch 只是更改符号链接,因此速度非常快。在 External Commands 下查看 Homebrew Wiki 上的更多文档。

【讨论】:

我试过这个,它成功了消息“为/usr/local/Cellar/node/0.4.7创建了33个链接”,但是当我之后运行节点时,它失败了消息“ -bash: /usr/local/bin/node: 没有这样的文件或目录 " .知道出了什么问题吗?注意:我手动下载了 0.4.7 并将其放在地窖目录中,因为我不知道如何下载任何内容,但使用 brew 下载最新的节点版本。 我希望你知道有一种叫做“nvm”的东西[github.com/creationix/nvm]! 我依赖于已经安装的包版本。如果您缺少该版本,您仍需要应用所选答案。 @NicStrong 实际上,brew switch 依赖于已安装的抢手版本。不幸的是,目前接受的答案非常无用、令人费解且过时。 There are better 下面的答案更多更有帮助。 brew switch 现在好像坏了。我得到:Error: Calling `brew switch` is disabled! Use `brew link` @-versioned formulae instead.【参考方案4】:

更新:2015 年 1 月 15 日

查找所需软件和版本的提交历史记录。例如我需要从 docker 版本 1.4.1 切换到 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb 使用此按钮查看文件: 单击原始按钮: 从地址栏复制URL(本例中为docker.rb url) brew install <url>(可能必须先brew unlink,例如brew unlink dockerbrew switch docker 1.3.3 切换回 docker 1.4.1 brew switch docker 1.4.1

来自gist

brew update
brew versions FORMULA
cd `brew --prefix`
git checkout HASH Library/Formula/FORMULA.rb  # use output of "brew versions"
brew install FORMULA
brew switch FORMULA VERSION
git checkout -- Library/Formula/FORMULA.rb    # reset formula

## Example: Using Subversion 1.6.17
#
# $ brew versions subversion
# 1.7.3    git checkout f8bf2f3 /usr/local/Library/Formula/subversion.rb
# 1.7.2    git checkout d89bf83 /usr/local/Library/Formula/subversion.rb
# 1.6.17   git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
# 1.6.16   git checkout 83ed494 /usr/local/Library/Formula/subversion.rb
# 1.6.15   git checkout 809a18a /usr/local/Library/Formula/subversion.rb
# 1.6.13   git checkout 7871a99 /usr/local/Library/Formula/subversion.rb
# 1.6.12   git checkout c99b3ac /usr/local/Library/Formula/subversion.rb
# 1.6.6    git checkout 8774131 /usr/local/Library/Formula/subversion.rb
# 1.6.5    git checkout a82e823 /usr/local/Library/Formula/subversion.rb
# 1.6.3    git checkout 6b6d369 /usr/local/Library/Formula/subversion.rb
# $ cd `brew --prefix`
# $ git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
# $ brew install subversion
# $ brew switch subversion 1.6.17
# $ git checkout -- Library/Formula/subversion.rb

【讨论】:

这是唯一对我有用的东西。非常愚蠢的是,一个包管理器需要这么多的时间来安装之前的版本。也许我被 ruby​​ RVM 和 bundler 宠坏了,但是这个过程确实需要精简和抽象。 当我尝试转到以前版本的 Ansible 时,我必须在安装以前的版本之前取消链接公式,如所示。所以在做brew install <url>brew unlink <formulaname>之前。否则,这是(迄今为止)切换到特定版本公式的最简单、最简洁的方法。 我通过brew log <formula>轻松找到了地址 我整理了一个网页,用于快速查找每个包的历史版本:bagonyi.github.io/brewed 这不再起作用了。 discourse.brew.sh/t/…【参考方案5】:

按照@halfcube 的建议,这非常有效:

    在以下位置查找您要查找的库 https://github.com/Homebrew/homebrew-core/tree/master/Formula 点击:https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb 单击“历史”按钮查看旧提交:https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb 点击你想要的:“postgresql: update version to 8.4.4”,https://github.com/Homebrew/homebrew-core/blob/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb 点击“原始”链接:https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb

【讨论】:

这是安装所需版本的软件包的最简单方法,如果它在核心 repo 中不可用 package@version 如果不能使用 web 界面,可以克隆 repo 并在本地执行:使用 git log master -- Formula/PACKAGENAME.rb 获取提交历史记录,检查正确的提交,然后运行 ​​brew install Formula/PACKAGENAME.rb安装它。 我认为你需要brew unlink 在其他版本的brew install 之前。 我这样做brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb 但得到错误,可能是由于@ 标志:Error: No available formula with the name "postgresql%409.6" In formula file: /Users/maciek/Library/Caches/Homebrew/Formula/postgresql%409.6.rb Expected to find class Postgresql%4096, but only found: PostgresqlAT96. 任何想法? 不再工作 Invalid usage: Installation of carthage from a GitHub commit URL is unsupported! brew 提取 carthage` 到 GitHub 上的稳定点击。`【参考方案6】:

我发现了比其他复杂解决方案更好的替代解决方案。

brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb

这将下载并安装 PostgreSQL 8.4.8


我通过开始按照在 repo 中搜索 repo 和 comment 的步骤找到了这个解决方案。

经过一番研究,发现有人收藏了一些稀有的配方。


如果您正在寻找 mysql 5.1.x,请尝试一下。

brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb

【讨论】:

嗯,brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb 似乎因语法错误而失败。 @BrianArmstrong 您指的是文件的 html 格式版本,而您需要 raw version。 不要忘记网址中的raw homebrew-versions 消失了,现在一切都在core 上,所以一般情况是:brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rbCOMMIT可以通过github.com/Homebrew/homebrew-core/commits/master/Formula/…找到。 似乎有效,但已被弃用,因此很快就会消失Warning: Calling Installation of sshuttle from a GitHub commit URL is deprecated! Use 'brew extract sshuttle' to stable tap on GitHub instead.【参考方案7】:

更新:此方法已弃用,不再有效。

此方法会导致错误:不支持从 GitHub 提交 URL 安装 mysql! brew extract mysql 改为在 GitHub 上稳定点击。 (使用错误)

$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).

...

Traceback (most recent call last):
    9: from /usr/local/Homebrew/Library/Homebrew/brew.rb:122:in `<main>'
    8: from /usr/local/Homebrew/Library/Homebrew/cmd/install.rb:132:in `install'
    7: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:302:in `parse'
    6: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:651:in `formulae'
    5: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:651:in `map'
    4: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:655:in `block in formulae'
    3: from /usr/local/Homebrew/Library/Homebrew/formulary.rb:351:in `factory'
    2: from /usr/local/Homebrew/Library/Homebrew/formulary.rb:138:in `get_formula'
    1: from /usr/local/Homebrew/Library/Homebrew/formulary.rb:142:in `klass'
/usr/local/Homebrew/Library/Homebrew/formulary.rb:227:in `load_file': Invalid usage: Installation of mysql from a GitHub commit URL is unsupported! `brew extract mysql` to a stable tap on GitHub instead. (UsageError)
    12: from /usr/local/Homebrew/Library/Homebrew/brew.rb:155:in `<main>'
    11: from /usr/local/Homebrew/Library/Homebrew/brew.rb:157:in `rescue in <main>'
    10: from /usr/local/Homebrew/Library/Homebrew/help.rb:64:in `help'
     9: from /usr/local/Homebrew/Library/Homebrew/help.rb:83:in `command_help'
     8: from /usr/local/Homebrew/Library/Homebrew/help.rb:103:in `parser_help'
     7: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:302:in `parse'
     6: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:651:in `formulae'
     5: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:651:in `map'
     4: from /usr/local/Homebrew/Library/Homebrew/cli/parser.rb:655:in `block in formulae'
     3: from /usr/local/Homebrew/Library/Homebrew/formulary.rb:351:in `factory'
     2: from /usr/local/Homebrew/Library/Homebrew/formulary.rb:138:in `get_formula'
     1: from /usr/local/Homebrew/Library/Homebrew/formulary.rb:142:in `klass'
/usr/local/Homebrew/Library/Homebrew/formulary.rb:227:in `load_file': Invalid usage: Installation of mysql from a GitHub commit URL is unsupported! `brew extract mysql` to a stable tap on GitHub instead. (UsageError)

我尝试使用推荐的命令进行安装,但它在 MySQL 5.7.10 的这个特定实例中不起作用。使用更新的公式可能会带来更好的运气。

$ brew extract --version=5.7.10 mysql homebrew/cask
==> Searching repository history
==> Writing formula for mysql from revision 0fa511b to:
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Formula/mysql@5.7.10.rb

$ 

$ brew install /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Formula/mysql@5.7.10.rb
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 1 formula.
Error: undefined method `core_tap?' for nil:NilClass

Error: Failed to load cask: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Formula/mysql@5.7.10.rb
Cask 'mysql@5.7.10' is unreadable: wrong constant name #<Class:0x00007f9b9498cad8>
Warning: Treating /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Formula/mysql@5.7.10.rb as a formula.
==> Installing mysql@5.7.10 from homebrew/cask
==> Downloading https://homebrew.bintray.com/bottles/cmake-3.19.4.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/278f2ad1caf664019ff7b4a7fc5493999c06adf503637447af13a617d45cf484?response-content-disposition=attachment%3Bfilenam
######################################################################## 100.0%
==> Downloading https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.bz2
==> Downloading from https://phoenixnap.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.bz2
######################################################################## 100.0%
==> Downloading https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.10.tar.gz

curl: (22) The requested URL returned error: 404 Not Found
Error: Failed to download resource "mysql@5.7.10"
Download failed: https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.10.tar.gz

可以修改上述路径中的公式(用 ruby​​ 编写)以尝试达到您想要的结果(例如,在最近的 macOS 版本上安装 MySQL 5.7.10)。 p>


您可以使用识别公式的策略以及公式历史中与您要安装的软件包版本相匹配的特定提交。

    转到https://github.com/Homebrew/homebrew-core

    按键盘上的t 激活文件查找器。

    找出一个看起来最相关的公式,可能是:Formula/mysql.rb,将您带到论坛文件位置:https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb。

    单击位于https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb 的History 按钮查看修订历史记录。如果您对 MySQL 5.7.10 感兴趣,您可能需要单击 5.7.11 之前的最新版本,它会导航到 GitHub 提交:

https://github.com/Homebrew/homebrew-core/commit/c77882756a832ac1d87e7396c114158e5619016c#Formula/mysql.rb

注意:如果提交历史记录未在浏览器中加载,您可能必须根据 GitHub 的建议在控制台中查看提交历史记录。如果您有兴趣在 GitHub 上查看该提交,请在 URL 中替换上面的提交 SHA。或者,跳到下面的第 7 步。

    应用提交后点击“查看”按钮查看mysql.rb文件的源代码。

    然后点击“Raw”按钮查看原始源代码。

    复制网址。或者,使用 mysql.rb 文件名自己构建 URL 以标识您的公式和该公式的特定版本(由下面 URL 中的 commmit SHA 标识)。

https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb

    $ brew install [URL from step 7]安装它

     $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
    

【讨论】:

不幸的是,这在答案列表中太靠后了,但却是最好的解决方案。这就是我使用的,除了使用 braumeister 之外,我只是转到我想要的公式的 Homebrew GitHub 页面(例如,对于 gcc 转到 github.com/Homebrew/homebrew/blob/master/Library/Formula/gcc.rb),然后我浏览文件的“历史记录”,直到我得到到我想要的版本。 这绝对是我的最佳解决方案 - 安装不需要 Xcode 8.1 的旧版 Watchman 这确实是安装旧版本最简单的方法。很好的答案 这对我有用,但我必须先 brew unlink 软件。 这对我来说是最简单的解决方案。这应该更高,因为接受的答案已经过时了。【参考方案8】:

大多数其他答案现在已经过时了。不幸的是,Homebrew 仍然没有安装过时版本的内置方法,除非该版本作为单独的公式存在(例如 python@2postgresql@9.4...)。

幸运的是,对于其他公式,有一种比过去需要的复杂混乱更简单的方法。以下是完整说明:

    在日志中搜索正确的版本:

    brew log formula
    # Scroll down/up with j/k or the arrow keys
    # or use eg. /4\.4\.23 to search a specific version
    
    # This syntax only works on pre-2.0 Homebrew versions
    brew log --format=format:%H\ %s -F --grep=‹version› ‹formula›
    

    这将显示提交哈希列表。取一个合适的(大多数情况下应该很明显,通常是最新的(即顶部)。

    在上游存储库中查找公式所在的 URL:

    brew info ‹formula› | grep ^From:
    

    修正网址:

      github.com 替换为raw.githubusercontent.comblob/master 替换为我们在第一步中找到的提交哈希。

    通过将先前找到的 URL 中的 master 替换为提交哈希来安装所需的版本,例如:

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
    

(最后一步可能需要先运行brew unlink ‹formula›。)


如果您复制了要使用的提交哈希,则可以使用类似于此示例的内容来安装该版本,将值和 bash 替换为您的提交哈希和所需的公式。

BREW_VERSION_SHA=32353d2286f850fd965e0a48bcf692b83a6e9a41
BREW_FORMULA_NAME=bash
brew info $BREW_FORMULA_NAME \
| sed -n \
    -e '/^From: /s///' \
    -e 's/github.com/raw.githubusercontent.com/' \
    -e 's%blob/%%' \
    -e "s/master/$BREW_VERSION_SHA/p" \
| xargs brew install

此示例安装的是 bash 4.4.23 而不是 bash 5,但如果您之后执行 brew upgrade,则 bash 5 将安装在顶部,除非您首先执行 brew pin bash。为了在不固定的情况下更顺畅,您应该首先使用brew install bash 安装最新版本,然后使用brew unlink bash,然后根据上面的脚本安装所需的旧版本,然后使用brew switch bash 4.4.23 设置指向旧版本的符号链接版本。现在 brew upgrade 应该不会影响您的 Bash 版本。您可以brew switch bash 获取可切换到的版本列表。


使用自定义本地专用水龙头的替代方法

实现相同目标的另一种方法似乎是:

brew tap-new username/repo-name
# extract with a version seems to run a grep under the hood
brew extract --version='4.4.23' bash username/repo-name
brew install bash@4.4.23
# Note this "fails" when trying to grab a bottle for the package and seems to have
# some odd doubling of the version in that output, but this isn't fatal.

这会在您的自定义水龙头中创建一个formula@version,您可以按照上述示例进行安装。缺点是您可能仍然需要先brew unlink bash,然后再brew link bash@4.4.23 才能使用特定版本的 Bash 或任何其他公式。

【讨论】:

他们显然改变了 brew log 的语法,所以任何额外的 -F--grep 选项对我来说都失败了。 @dragon788 该死的地狱,Homebrew 2 完全崩溃了brew log。我现在懒得写新版本了,因为这需要正确解析 git log 消息,或者直接在相应的存储库上运行 git log。而更新日志似乎甚至没有提到这个重大变化。超越烦人。 除非他们接受行为变化是一个错误,否则似乎需要External Commandbrew 的结构内操作才能获得git log 类型的过滤。 docs.brew.sh/External-Commands 这是我唯一能找到正确 brew extract 用法的地方,谢谢! 我建议让自定义 local0only 点击答案的第一部分。这似乎是整体上最好的解决方案。【参考方案9】:

解决方案

brew extract --version=8.4p1  openssh homebrew/cask
brew install openssh@8.4p1

最新的openssl@8.5p1在我运行brew upgrade后有bug,所以我通过上述方式成功回退到以前的版本。

【讨论】:

截至 2021 年 4 月,这是我能找到的唯一可行且合理的解决方案。谢谢@JsonBruce 这项工作适合我,2021 年 9 月。我之前做过brew unlink【参考方案10】:

官方方法(从https://github.com/Homebrew/brew/issues/6028的回复来看)

不幸的是,Homebrew 仍然没有明显的内置方式来安装旧版本。

幸运的是,对于大多数公式来说,有一种比过去需要的复杂混乱更简单的方法。以下是以bash 为例的完整说明:

brew tap-new $USER/local-tap
# extract with a version seems to run a `git log --grep` under the hood
brew extract --version=4.4.23 bash $USER/local-tap
# Install your new version from the tap
brew install bash@4.4.23
# Note this "fails" trying to grab a bottle for the package and seems to have
# some odd doubling of the version in that output, but this isn't fatal.

这会在您的自定义水龙头中创建formula@version,您可以按照上述示例进行安装。一个重要的注意事项是,如果您之前安装了公式的默认/最新版本,您可能需要brew unlink bash,然后brew link bash@4.4.23 才能使用您的特定版本的 Bash(或任何其他您拥有最新和已安装旧版本)。

此方法的一个潜在缺点是您不能轻松地在版本之间来回切换,因为根据brew 这是一个“不同的公式”。

如果你希望能够使用brew switch $FORMULA $VERSION,你应该使用下一个方法。


脚本方法(推荐)

此示例显示了安装较旧的 bash 4.4.23,这是一个有用的示例,因为 bash 公式当前安装的是 bash 5。

先用brew install bash安装最新版公式 然后brew unlink bash 然后按照下面的 sn-ps 安装您想要的旧版本 最后使用brew switch bash 4.4.23 设置指向您的版本的符号链接

如果您在安装旧版本后执行brew upgrade 而不先安装最新版本,则安装最新版本会破坏您的旧版本,除非您先执行brew pin bash

此处的步骤避免固定,因为它很容易忘记,并且您可能会固定到将来变得不安全的版本(请参阅 Shellshock/etc)。通过此设置,brew upgrade 应该不会影响您的 Bash 版本,您始终可以运行 brew switch bash 以获取可切换到的版本列表。

复制并粘贴并编辑下面代码 sn-p 中的 export 行以使用所需的版本和公式名称进行更新,然后按原样复制并粘贴其余部分,它将使用这些变量来发挥作用。

# This search syntax works with newer Homebrew
export BREW_FORMULA_SEARCH_VERSION=4.4.23 BREW_FORMULA_NAME=bash
# This will print any/all commits that match the version and formula name
git -C $(brew --repo homebrew/core) log \
--format=format:%H\ %s -F --all-match \
--grep=$BREW_FORMULA_SEARCH_VERSION --grep=$BREW_FORMULA_NAME

当您确定公式中存在版本时,您可以使用以下:

# Gets only the latest Git commit SHA for the script further down
export BREW_FORMULA_VERSION_SHA=$(git -C $(brew --repo homebrew/core) log \
 --format=format:%H\ %s -F --all-match \
--grep=$BREW_FORMULA_SEARCH_VERSION --grep=$BREW_FORMULA_NAME | \
head -1 | awk 'print $1')

导出要使用的提交哈希后,您可以使用它来安装该版本的包。

brew info $BREW_FORMULA_NAME \
| sed -n \
    -e '/^From: /s///' \
    -e 's/github.com/raw.githubusercontent.com/' \
    -e 's%blob/%%' \
    -e "s/master/$BREW_FORMULA_VERSION_SHA/p" \
| xargs brew install

按照公式输出中的说明将其放入 PATH 或将其设置为默认 shell。

【讨论】:

这似乎是最好的最新答案之一 - 谢谢@dragon788!我为 chrome 安装了“*** Power User”,以展开所有 cmets,并在收到许多其他人提到的弃用警告时搜索“brew extract”。我看到这是你最近对这个问题的贡献,所以我假设这是(至少一个)最新的答案。 另外,这里是brew extractdocs.brew.sh/Manpage#extract-options-formula-tap的官方文档 我偶尔还是会回到这个问题上,以便获取我可能仍需要编译的软件的替代版本,因为它在我帮助维护的大量微服务中的某个地方使用。我很高兴其他人也发现它有用。 还有一个问题,如果你往前走太远,他们使用的是 SHA1 而不是 SHA256 或更新版本,因此你必须更新公式以处理任何 brew ABI/API 更改. ***.com/questions/3987683/…【参考方案11】:

我只是使用 Homebrew 回到 Maven 2.2.1,因为简单的 brew install maven 安装了 Maven 3.0.3。

首先你必须把 maven 目录留在那里

$ brew unlink Maven

使用 brew tap 命令

$ brew tap homebrew/versions 克隆到 '/usr/local/Library/Taps/homebrew-versions'... 远程:计数对象:590,完成。 远程:压缩对象:100% (265/265),完成。 远程:总计 590(增量 362),重复使用 549(增量 325) 接收对象:100% (590/590), 117.49 KiB | 79 KiB/s,完成。 解决增量:100% (362/362),完成。 挖掘 50 公式

现在可以安装maven2公式了:

$ brew install maven2 ==> 下载 http://www.apache.org/dist/maven/maven-2/2.2.1/binaries/apache-maven-2.2.1-bin.tar.gz ################################################# ###################### 100.0% /usr/local/Cellar/maven2/2.2.1:10个文件,3.1M,6秒内建好 $ mvn --版本 阿帕奇 Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700) Java版本:1.6.0_37 Java 主页:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 默认语言环境:en_US,平台编码:MacRoman 操作系统名称:“mac os x” 版本:“10.7.4” 架构:“x86_64” 系列:“mac”

编辑: 您也可以只 brew switch maven 2.2.1 切换到不同的版本。

编辑: Apache Maven 项目重新组织了他们的存储库。更新了此答案以解决此更改。

【讨论】:

这很有帮助。请注意,apache 基金会已将 maven 二进制文件重新组织到版本 (1,2,3) 特定目录中,因此您需要为 2.2.1 和其他版本编辑 maven.rb 以适应新结构。例如,2.2.1 的二进制文件位于:apache.org/dist/maven/maven-2/2.2.1/binaries/…。注意 url 中的“maven-2/2.2.1/”。 @CharlesForcey 你对 maven dist repo 的重组是正确的。我将更新答案以使用 brew tap 以使用较旧的 maven2 公式。感谢您的评论。【参考方案12】:

不小心升级了 Postgres?

我的情况:

postgresql 意外从 11 升级到 12(在不带参数运行 brew upgrade 之后) 我想保留 Postgres 11。

解决方案:

    停止数据库:
brew services stop postgresql
    安装 Postgres 11:
brew install postgresql@11
    启用它:
brew link postgresql@11 --force
    (可选)将 DB 数据目录从 postgres 重命名为 postgres@11
cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
    启动数据库:
brew services start postgresql@11

如果您有任何错误,请检查/usr/local/var/log/postgresql@11.log(注意@11)。

【讨论】:

这仅适用于 postgresql@11 的特殊情况,Homebrew 维护人员明确保留它以帮助进行数据存储迁移(使用特殊命令 brew postgresql-upgrade-database 执行)。这个答案对几乎任何其他公式都没有用。 @AdamWróbel 我已经决定可以回答关于 Postgres 的原始问题brew postgresql-upgrade-database 用于升级。我的回答是关于使用 older Postgres 版本。简单地切换二进制文件是行不通的。 未使用版本管理器的 NodeJS 用户,例如nvm,仅供参考,我很幸运地将这种技术用于较旧的 LTS 版本。至少在编写 v10 和 v12 时应该可用,例如brew install node@12formulae.brew.sh/formula/node【参考方案13】:

根据@tschundeee 和@Debilski’s update 1 描述的工作流程,我将过程自动化并在this script 中添加了清理。

Download it,把它放在你的路径和brewv &lt;formula_name&gt; &lt;wanted_version&gt;。对于特定的 OP,它将是:

cd path/to/downloaded/script/
./brewv postgresql 8.4.4

:)

【讨论】:

太棒了。为什么这不在 brew 中? 找不到了:(【参考方案14】:

一个更新的答案,因为它增加了@lance-pollard 已经发布的工作答案。

如何安装特定版本的公式(本例中使用的公式是terraform):

    找到您的公式文件,例如:https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb 如果您已在本地克隆了 repo,请使用 https://github.com/Homebrew/homebrew-core/commits/master/Formula/terraform.rb 或 git log master -- Formula/terraform.rb 从 github 的历史记录中获取提交版本。 使用公式的提交版本获取原始 git URL:如果 github.com 中的公式链接是 https://github.com/Homebrew/homebrew-core/blob/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb,那么您的原始 URL 将是:https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb 安装它:brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb

【讨论】:

要在第 3 步中获取原始 git URL,您也可以点击“原始”按钮并复制浏览器将您带到的 URL。【参考方案15】:

Homebrew 最近发生了变化。曾经有效的东西不再有效。我发现最简单的工作方式(2021 年 1 月)是:

为我的软件找到.rb 文件(首先转到Formulas,找到我需要的文件,然后单击“历史记录”;对于CMake,这是https://github.com/Homebrew/homebrew-core/commits/master/Formula/cmake.rb) 在修订中选择所需的版本,例如3.18.4,单击.rb 文件差异(...)右上角的三个点,然后单击Raw。复制网址。 取消链接旧版本brew unlink cmake 直接从 git URL 安装不再起作用(brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb 将失败) 相反,从本地文件下载并安装curl -O https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb &amp;&amp; brew install ./cmake.rb

瞧!您现在可以删除下载的.rb文件。

【讨论】:

有时你必须想得足够简单,谢谢顺便说一句:D 我正在尝试让它用于下载 CMake 3.19.2,我收到一个错误,由于字符限制,我无法在此处详细发布,但要点是:curl : (22) The requested URL returned error: 404 Error: Failed to download resource "cmake_bottle_manifest" 我知道 url 是正确的,raw.githubusercontent.com/Homebrew/homebrew-core/…,我做错了什么?我什至在我下载它的目录中也看到了该文件,所以这非常令人困惑 这是我使用的确切命令: curl -O raw.githubusercontent.com/Homebrew/homebrew-core/… && brew install ./cmake.rb 我在这里更详细地发布了我的问题:***.com/questions/67781625/…【参考方案16】:

在最新版本的自制软件(撰写本文时为 0.9.5)上,您要安装的自制软件桶版本会有一个特定的配方。示例:

$ brew search mongodb
mongodb    mongodb24  mongodb26

然后像平常一样做brew install mongodb26

如果您已经安装了最新版本,请务必取消链接最新版本并链接所需版本:brew unlink mongodb &amp;&amp; brew link mongodb26

【讨论】:

虽然这可能会回答问题,但it would be preferable 将在此处包含答案的基本部分,并提供链接以供参考。【参考方案17】:

homebrew/versions 的问题在于,必须有人在存储库中列出特定版本的软件才能使用它。此外,由于不再支持brew versions,因此需要另一种解决方案。对于指示使用 brew switch 的解决方案,这仅在您尚未使用 brew cleanup 时才有效,因为该版本需要存在于您的计算机上。

我想安装docker-machine 中未列出的特定旧版本homebrew/versions 时遇到问题。我使用下面的方法解决了这个问题,它也应该适用于任何 brew 安装的软件。下面的示例将使用 docker-machine 作为我要从版本 0.5.0 降级到 0.4.1 的包。

    转到您的自制程序Formula 目录。 您可以通过运行brew info [any package name] 来确定这一点。 例如,brew info docker-machine 给了我一个显示我的行 一条路径 - /usr/local/Cellar/docker-machine/0.5.0。这告诉我,在我的机器上,自制软件安装在/usr/local和我的Formula 目录默认位于/usr/local/Library/Formula

    找到您的包的特定公式文件 (.rb)。 由于要降级docker-machine,所以可以看到docker-machine.rb文件。

    获取此公式文件的版本历史记录。 输入git log docker-machine.rb。这将列出该文件的完整提交历史记录。你会看到这样的输出:

...更多的 提交 20c7abc13d2edd67c8c1d30c407bd5e31229cacc 作者:BrewTestBot 日期:2015 年 11 月 5 日星期四 16:14:18 +0000 码头机器:更新 0.5.0 瓶。 提交 8f615708184884e501bf5c16482c95eff6aea637 作者:文森特·莱西尔斯 日期:2015 年 10 月 27 日星期二 22:25:30 +0100 码头机器 0.5.0 将 docker-machine 更新为 0.5.0 关闭#45403。 签字人:Dominyk Tiller 提交 5970e1af9b13dcbeffd281ae57c9ab90316ba423 作者:BrewTestBot 日期:2015 年 9 月 21 日星期一 14:04:04 +0100 码头机器:更新 0.4.1 瓶。 提交 18fcbd36d22fa0c19406d699308fafb44e4c8dcd 作者:BrewTestBot 日期:2015 年 8 月 16 日星期日 09:05:56 +0100 码头机器:更新 0.4.1 瓶。 ...更多的

棘手的部分是找到您想要的特定版本的最新提交。在上面,我可以看出最新的 0.4.1 版本是用这个提交标签提交的:commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423。上面的提交开始使用 0.5.0 版本(git 日志条目从最新到最早的日期列出)。

    获取以前版本的公式文件。 使用第 3 步中的提交标记(您可以使用前 6 个字符),您可以使用以下命令获取旧版本的公式文件:

    git checkout 5970e1 docker-machine.rb

    卸载您当前的软件包版本。 只需运行正常的 brew 命令即可卸载当前版本的软件包。 前任。 brew uninstall docker-machine

    安装旧版软件包 现在,您只需运行正常的 brew install 命令,它将安装您已结帐的公式。 前任。 brew install docker-machine

如有必要,您可能需要使用brew link docker-machine 重新链接。

如果您在任何时候想要恢复到特定包的最新版本,请进入公式目录并在您的公式文件 (.rb) 上发出以下命令

git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb

然后您可以brew uninstall docker-machinebrew install docker-machine 获取最新版本并保持这种状态。

【讨论】:

写得很透彻@rchawdry,谢谢。顺便说一句:要找到与您想要的版本匹配的提交,请快速添加 --grep 参数git log --grep 0.4.1 docker-machine.rb 对我来说,路径是/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula 我无法以这种方式为 cairo brew 找到足够的版本历史记录。出于某种原因,@sealocal 的答案显示得更多。【参考方案18】:

编辑:2021 年,由于 github 安装已弃用,此答案不再有效。(感谢 Tim Smith 的更新)。

安装旧的 brew 包版本(Flyway 4.2.0 示例)

在本地找到本地 homebrew git 目录或克隆 Homebrew/homebrew-core

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/

git clone git@github.com:Homebrew/homebrew-core.git

列出所有可用版本

git log master -- Formula/flyway.rb

复制你想要的版本的提交ID并直接安装

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Formula/flyway.rb

【讨论】:

为什么不简单地从homebrew-core 目录运行brew install Formula/flyway.rb?它在不使用raw.github.. 地址的情况下对我有用 这可能是截至 2020 年 6 月 21 日 (Homebrew 2.4.0-93-g634c457) 唯一有效的答案 使用brew log some_package就可以了 不再起作用 (Homebrew 2.7.0)。 brew install 失败并显示不支持从 GitHub 提交 URL 安装的消息。【参考方案19】:

我在这里尝试了大多数解决方案,但它们已经过时了。我不得不将这里的一些想法与我自己的工作结合起来。因此,我创建了一个脚本来帮助我完成繁重的工作,您可以找到 here

用法:

brewv.sh formula_name desired_version

【讨论】:

【参考方案20】:

对于最新版本的 brew 来说,这可以很容易地完成。

brew tap homebrew/versions
brew install subversion17 # for svn 1.7 branch instead of last available
brew install postgresql8  # for postgresql 8 (which you ask)

【讨论】:

...如果有人费心为该软件包创建版本化配方。【参考方案21】:

这些都不适合我的情况(Python),所以我会加我的 2 美分:

cd `brew --prefix`
git log Library/Formula/python.rb

输出如下所示:

commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de
Author: Dominyk Tiller <dominyktiller@gmail.com>
Date:   Thu Jun 30 17:42:18 2016 +0100

    python: clarify pour_bottle reason

commit cb3b29b824a264895434214e191d0d7ef4d51c85
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date:   Wed Jun 29 14:18:40 2016 +0100

    python: update 2.7.12 bottle.

commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0
Author: Rakesh <rakkesh@users.noreply.github.com>
Date:   Wed Jun 29 10:02:26 2016 +0530

    python 2.7.12

    Closes #2452.

    Signed-off-by: Tim D. Smith <git@tim-smith.us>

commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date:   Fri Jun 17 20:14:36 2016 +0100

    python: update 2.7.11 bottle.

...

我想要版本2.7.11,所以我的哈希是cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(或简称cf5da05)。接下来,我查看那个版本并安装公式python

git checkout cf5da05
brew install python

最后,清理一下:

git checkout master

【讨论】:

生活改变了,这个答案是最相关的。不要忘记HOMEBREW_NO_AUTO_UPDATE 并阅读github.com/Homebrew/brew/issues/1188 正确的命令是cd brew --prefix/Homebrewgit log Library/Taps/homebrew/homebrew-core/Formula/python.rb 但即使这样也行不通,因为/Library/Taps 被忽略了。 别忘了HOMEBREW_NO_AUTO_UPDATE。是的,在你发现你需要它之​​前不要忘记你需要的东西。 xD 这个怎么样? HOMEBREW_NO_INSTALL_CLEANUP 这不是你需要记住的吗?【参考方案22】:

目前安装特定公式版本的旧方法已被弃用。所以看起来我们必须使用brew edit [formula]。例如。假设我们要安装icu4c62.1 版本(例如postgresql 10.5 需要)。那你就得

> brew edit icu4c
# drops you to editor

在这里,您必须将urlversionsha256(可能还有mirror)更改为相应的62.1 字符串。

url "https://ssl.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz"
mirror "https://github.com/unicode-org/icu/releases/download/release-62-1/icu4c-62_1-src.tgz"
version "62.1"
sha256 "3dd9868d666350dda66a6e305eecde9d479fb70b30d5b55d78a1deffb97d5aa3"

然后运行brew reinstall icu4c 最终下载62.1 版本。

【讨论】:

如何获得sha256 ?在我的情况下https://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip @simo 您可以下载文件并在终端中使用命令 sha256sum。 如果采用此解决方案,您可能希望返回到以前的配置。见:github.com/Homebrew/homebrew-core/tree/master/Formula【参考方案23】:

如果您使用brew search &lt;formula&gt; 找不到您的版本,您也可以尝试查看公式的提交日志以找到您想要的版本:

这是一个通过 brew 安装旧版本 nginx 的示例:

ngxnx formula commit log

nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049

从那里,我们可以使用 sha 和原始 git url 安装 1.6.3

brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb

【讨论】:

【参考方案24】:

这里的其他答案很好,但是如果您需要安装旧版本的软件包并确保修改了软件包名称,则需要另一种方法。这在使用脚本(在我的例子中是 php 构建脚本)时很重要,这些脚本使用 brew --prefix package_name 来确定用于编译的目录。

如果您使用的是brew extract,则会在包名称的末尾添加一个版本,这将破坏brew --prefix 查找。

以下是在保持原始包名称的同时安装旧包版本的方法:

# uninstall the newer version of the package that you accidentally installed
brew uninstall --ignore-dependencies icu4c

# `extract` the version you'd like to install into a custom tap
brew tap-new $USER/local-tap
brew extract --version=68.2 icu4c $USER/local-tap

# jump into the new tap you created
cd $(brew --repository $USER/local-tap)/Formula

# rename the formula
mv icu4c@68.2.rb icu4c.rb

# change the name of the formula by removing "AT682" from the `class` definition
# the exact text you'll need to remove will be different
# depending on the version you extracted
nano icu4c.rb

# then, install this specific formula directly
brew install $(brew --repository $USER/local-tap)/Formula/icu4c.rb

I wrote more about this here.

【讨论】:

【参考方案25】:

我创建了a tool 来简化this answer 中规定的流程。

要查找版本为a.b.c 的包pkg,请运行:

$ brew-install-specific pkg@a.b.c

这将列出 pkg homebrew 公式中提及给定版本及其 GitHub 网址的提交。

Matching versions:
1. pkg: update a.b.c bottle.
   https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
2. pkg: release a.b.c-beta
   https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
3. pkg a.b.c
   https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>

Select index: 

验证来自给定 URL 的提交,并输入所选提交的索引。

Select index: 2
Run:
  brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb

复制并运行给定的命令进行安装。

【讨论】:

【参考方案26】:

这是我的简单答案 - 真的很恼火没有内置的解决方案,所以我构建了自己的懒惰“脚本”。随意贡献???

# Please define variables
packageName=<packageName>
packageVersion=<packageVersion>

# Create a new tab
brew tap-new local/$packageName

# Extract into local tap
brew extract --version=$packageVersion $packageName local/$packageName

# Verify packages is present
brew search $packageName@

# Run brew install@version as usual
brew install local/$packageName/$packageName@$packageVersion

https://gist.github.com/ArgonQQ/cff4834dab6b254cc2140bb1454b47ef

【讨论】:

【参考方案27】:

Library/Formula/postgresql.rb 第 8 行更新到

http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2

和第9行的MD5到

fcc3daaf2292fa6bf1185ec45e512db6

保存并退出。

brew install postgres
initdb /usr/local/var/postgres

现在在这个阶段,您可能会遇到 postgresql could not create shared memory segment 错误,要解决该更新 /etc/sysctl.conf 的问题,如下所示:

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216

再次尝试initdb /usr/local/var/postgres,它应该可以顺利运行。

在启动时运行 postgresql

launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist

希望有帮助:)

【讨论】:

【参考方案28】:

我刚刚将旧版本的 elasticsearch 复制到 /usr/local/Cellar/elasticsearch 目录中。

$ mkdir /usr/local/Cellar/elasticsearch/5.4.3/bin
$ cp elasticsearch /usr/local/Cellar/elasticsearch/5.4.3/bin
$ brew switch elasticsearch 5.4.3

就是这样。 也许它对任何人都有用。

【讨论】:

一个丑陋的黑客。但是,是的,当我尝试搜索和安装旧版本的领事时,它也对我有用!干杯。【参考方案29】:

brew versionsbrew install https://raw.githubusercontent.com/Homebrew/homebrew-core/&lt;COMMIT-HASH&gt;/Formula/&lt;Formula&gt;.rb 现在不支持。

你可以这样试试:

$ brew extract --version 5.6.2 gradle vitahlin/core
$ brew install gradle@5.6.2

【讨论】:

【参考方案30】:

这是我降级 KOPS(不支持版本控制)的方法

# brew has a git repo on your localhost
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core

git remote -v
origin  https://github.com/Homebrew/homebrew-core (fetch)
origin  https://github.com/Homebrew/homebrew-core (push)

# find the version of kops.rb you need
git log Formula/kops.rb

# checkout old commit
# kops: update 1.18.1 bottle.
git checkout 2f0ede7f27dfc074d5b5493894f3468f27cc73f0 -- Formula/kops.rb

brew unlink kops
brew install kops

# now we have old version installed
ls -1 /usr/local/Cellar/kops/
1.18.1
1.18.2

which kops
/usr/local/bin/kops
ls -l /usr/local/bin/kops
/usr/local/bin/kops -> ../Cellar/kops/1.18.1/bin/kops
kops version
Version 1.18.1

# revert to the newest version
brew uninstall kops
git checkout -f
brew link kops
kops version
Version 1.18.2

【讨论】:

以上是关于Homebrew安装特定版本的公式?的主要内容,如果未能解决你的问题,请参考以下文章

工具Homebrew的安装及使用

Mac怎么安装并配置Homebrew?

appium+python+jenkins 一套自动化测试框架搭建

如何使用 Homebrew 安装特定的 Java 版本?

OS 系统安装 SASS

Homebrew:使用新的公式@版本格式列出可用版本