ChatGPT解决这个技术问题 Extra ChatGPT

Homebrew安装特定版本的公式?

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

postgresql 很奇怪,因为它在 Homebrew 中曾经有单独的版本,像 bash 这样的东西可能是一个更好的例子,因为它在相同的公式名称中从 4.x 变为 5.x。请参阅stackoverflow.com/a/55764594/3794873
我阅读了所有的答案。现在是 2020 年,没有简单的方法或官方命令可以做到这一点
@oluckyman 没有简单的方法,因为这不是一个简单的问题。 Homebrew 要么支持旧版本(= 更多负担)要么不支持,你必须自己做。
我建议将 Docker PostgreSQL 的图像用于各种版本。使用空数据库进行测试非常容易,如果您想持久化数据,则相当容易。
该线程已变得很长,并且包含许多过时的答案。 2022 年的正确答案是这个解决方案,使用 brew extract:stackoverflow.com/a/66458452

l
laurent

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 月之间,homebrew 有一个 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)并阻止其更新,您可以pin 一个公式:

$ 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
自制/版本已弃用
r
rogerdpack

简单的工作流程

现在 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
C
Cœur

⚠ 此答案在 2020 年 12 月之后将不再有效:
brew switch 得到 disabled in HomeBrew 2.7.0 (deprecated in 2.6.0)

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

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.
a
alxndr

更新: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 (可能必须先 brew unlink,例如 brew unlink 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/…
G
Greg Dubicki

按照@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到 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 install 之前需要 brew unlink
我这样做 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 extract carthage` 到 GitHub 上的稳定点击。`
A
Arslan Ali

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

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>.rb。前往 github.com/Homebrew/homebrew-core/commits/master/Formula/… 可以找到 COMMIT
似乎它有效,但已被弃用,因此很快就会消失Warning: Calling Installation of sshuttle from a GitHub commit URL is deprecated! Use 'brew extract sshuttle' to stable tap on GitHub instead.
s
sealocal

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

此方法会导致错误:不支持从 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)。

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

转到 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 文件的源代码。然后单击“原始”按钮以查看原始源。复制网址。或者,使用 mysql.rb 文件名自己构建 URL 以标识您的公式和该公式的特定版本(由下面 URL 中的 commmit SHA 标识)。

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

使用 $ brew install [步骤 7 中的 URL] 安装它 $ 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 软件。
这对我来说是最简单的解决方案。这应该更高,因为接受的答案已经过时。
M
Max Xu

解决方案

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
这对我有用,2022 年 4 月 19 日。谢谢
这是正确的答案。太感谢了。
如何查看可用版本?
d
dragon788

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

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

在日志中搜索正确的版本: brew log formula # 使用 j/k 或箭头键向下/向上滚动 # 或使用例如。 /4\.4\.23 搜索特定版本 # 此语法仅适用于 2.0 之前的 Homebrew 版本 brew log --format=format:%H\ %s -F --grep=‹version› ‹formula› This将显示提交哈希列表。取一个合适的(大多数情况下应该很明显,通常是最新的(即顶部)。在上游存储库中找到公式所在的 URL: brew info ‹formula› | grep ^From: Fix the URL:将 github.com 替换为 raw.githubusercontent.com 将 blob/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 点击答案的第一部分。这似乎是整体上最好的解决方案。
d
dragon788

官方方法(从对 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

然后根据下面的片段安装您想要的旧版本

最后使用 brew switch bash 4.4.23 设置符号链接到您的版本

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

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

复制并粘贴并编辑下面代码片段中的 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 安装了“StackOverflow Power User”,以展开所有评论,并在收到许多其他人提到的弃用警告时搜索“brew extract”。我看到这是您对这个问题的最新贡献,所以我假设这是(至少一个)最新的答案。
另外,这里是 brew extract docs.brew.sh/Manpage#extract-options-formula-tap 的官方文档
有时我自己还是会回到这个问题上,以获取我可能仍需要编译的软件的替代版本,因为它在我帮助维护的大量微服务中的某个地方使用。我很高兴其他人也发现它有用。
还有一个问题是,如果您回溯太远,他们使用的是 SHA1 而不是 SHA256 或更新版本,因此您还必须更新公式以处理任何 brew ABI/API 更改。 stackoverflow.com/questions/3987683/…
C
Cameron Goodale

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

首先,您必须将 maven 目录留在那里

$ brew unlink maven

使用 brew tap 命令

$ brew tap homebrew/versions
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 590, done.
remote: Compressing objects: 100% (265/265), done.
remote: Total 590 (delta 362), reused 549 (delta 325)
Receiving objects: 100% (590/590), 117.49 KiB | 79 KiB/s, done.
Resolving deltas: 100% (362/362), done.
Tapped 50 formula

现在您可以安装 maven2 公式:

$ brew install maven2
==> Downloading 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 files, 3.1M, built in 6 seconds
$ mvn --version
Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700)
Java version: 1.6.0_37
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x" version: "10.7.4" arch: "x86_64" Family: "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 公式。感谢您的评论。
M
Max Malysh

意外升级 Postgres?

我的情况:

postgresql 意外从 11 升级到 12(在运行 brew upgrade 后不带参数)

我想保留 Postgres 11。

解决方案:

停止数据库:

brew services stop postgresql

安装 Postgres 11:

brew install postgresql@11

启用它:

brew link postgresql@11 --force

(可选)将数据库数据目录从 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@12 formulae.brew.sh/formula/node
t
the swine

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

找到我的软件的 .rb 文件(首先转到公式,找到我需要的文件,然后单击“历史记录”;对于 CMake,位于 https://github.com/Homebrew/homebrew-core/commits/master/ Formula/cmake.rb) 在修订中选择所需的版本,例如 3.18.4,单击 .rb 文件 diff (...) 右上角的三个点,然后单击 Raw。复制网址。

在修订中选择所需的版本,例如 3.18.4,单击 .rb 文件 diff (...) 右上角的三个点,然后单击 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 && brew install ./cmake.rb

相反,从本地文件下载并安装 curl -O https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb && brew install ./cmake.rb

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


有时你必须想得足够简单,谢谢顺便说一句:D
我正在尝试让它用于下载 CMake 3.19.2,我收到一个错误,由于字符限制,我无法在此处详细发布,但要点是: curl: (22) The requested URL returned错误:404 错误:无法下载资源“cmake_bottle_manifest” 我知道 url 是正确的,这是 raw.githubusercontent.com/Homebrew/homebrew-core/…,我做错了什么?我什至在我下载它的目录中也看到了该文件,所以这很令人困惑
这是我使用的确切命令: curl -O raw.githubusercontent.com/Homebrew/homebrew-core/… &&冲泡安装 ./cmake.rb
我在这里更详细地发布了我的问题:stackoverflow.com/questions/67781625/…
C
Community

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

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

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

:)


太棒了。为什么这不在 brew 中?
再也找不到了:(
M
Miguel Reyes

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

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

找到您的公式文件,例如:https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb 使用 https://github.com/Homebrew/homebrew- 从 github 的历史记录中获取提交版本core/commits/master/Formula/terraform.rb 或 git log master -- Formula/terraform.rb 如果你已经在本地克隆了 repo。使用公式的提交版本获取原始 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/e4ca4d2c41d4c1412994f9f1cb14993be5b25c /terraform.rb


要在第 3 步中获取原始 git URL,您也可以点击“原始”按钮并复制浏览器将您带到的 URL。
A
Alex Sharp

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

$ brew search mongodb
mongodb    mongodb24  mongodb26

然后像往常一样做brew install mongodb26

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


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

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

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

转到您的自制公式目录。您可以通过运行 brew info [any package name] 来确定这一点。例如, brew info docker-machine 给了我一行显示路径 - /usr/local/Cellar/docker-machine/0.5.0。这告诉我,在我的机器上,homebrew 安装在 /usr/local 并且我的 Formula 目录默认位于 /usr/local/Library/Formula 为您的包找到特定的公式文件 (.rb)。由于我想降级docker-machine,我可以看到一个docker-machine.rb 文件。获取此公式文件的版本历史记录。输入 git log docker-machine.rb。这将列出该文件的完整提交历史记录。你会看到这样的输出:

...more 

    commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
    Author: BrewTestBot 
    Date:   Thu Nov 5 16:14:18 2015 +0000

        docker-machine: update 0.5.0 bottle.

    commit 8f615708184884e501bf5c16482c95eff6aea637
    Author: Vincent Lesierse 
    Date:   Tue Oct 27 22:25:30 2015 +0100

        docker-machine 0.5.0

        Updated docker-machine to 0.5.0

        Closes #45403.

        Signed-off-by: Dominyk Tiller 

    commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
    Author: BrewTestBot 
    Date:   Mon Sep 21 14:04:04 2015 +0100

        docker-machine: update 0.4.1 bottle.

    commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
    Author: BrewTestBot 
    Date:   Sun Aug 16 09:05:56 2015 +0100

        docker-machine: update 0.4.1 bottle.

    ...more

棘手的部分是找到您想要的特定版本的最新提交。在上面,我可以看出最新的 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 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 的答案显示得更多。
f
ffghfgh

编辑:2021,由于不推荐使用 github 安装,此答案不再起作用。 (感谢蒂姆史密斯的更新)。

安装旧的 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 安装的消息。
G
Giacomo1968

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

用法:

brewv.sh formula_name desired_version

i
iloveitaly

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

如果您使用的是 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.


非常感谢@iloveitaly 的分享!
M
Maxim Kholyavkin

对于 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)

...如果有人费心为该软件包创建版本化的配方。
t
tenfishsticks

这些都不适用于我的案例(Python),所以我将添加我的 2 美分:

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

输出如下所示:

commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de Author: Dominyk Tiller Date: Thu Jun 30 17:42:18 2016 +0100 python: clarify pour_bottle reason commit cb3b29b824a264895434214e191d0d7ef4d51c85 Author: BrewTestBot Date: Wed 2016 年 6 月 29 日 14:18:40 +0100 python:更新 2.7.12 瓶。提交 45bb1e220341894bbb7de6fd3f6df20987dc14f0 作者:Rakesh 日期:2016 年 6 月 29 日星期三 10:02:26 +0530 python 2.7.12 关闭 #2452。签名人:Tim D. Smith commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 作者:BrewTestBot 日期:Fri Jun 17 20:14:36 2016 +0100 python:更新 2.7.11 瓶。 ...

我想要版本 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 这不是您需要记住的吗?
E
Emil Rehhnberg

目前,安装特定公式版本的旧方法已被弃用。所以看起来我们必须使用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
z
zishe

如果使用 brew search <formula> 找不到您的版本,您还可以尝试查看公式的提交日志以找到您想要的版本:

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

ngxnx 公式提交日志

见 nginx:更新 1.6.3 瓶 eba75b9a1a474b9fc4df30bd0a32637fa31ec049

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

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


A
ArgonQQ

在这里,我对此的简单回答 - 真的很恼火没有内置的解决方案,所以我构建了自己的懒惰“脚本”。随意贡献😃👍🏻

# 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


d
divs1210

我创建 a tool 是为了简化 this answer 中规定的过程。

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

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

这将列出 pkg 自制公式中提及给定版本及其 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

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


m
mmrs151

将 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

希望有帮助:)


T
Terru_theTerror

我刚刚将旧版本的 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

而已。也许它对任何人都有用。


一个丑陋的黑客。但是,是的,当我尝试搜索和安装旧版本的领事时,它也对我有用!干杯。
A
Alexey Dmitriev

这是我降级 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

J
J. B. Rainsberger

我决定根据自己的判断,为 Maven 3.1.1 创建一个公式,而 homebrew/versions 没有。去做这个:

我在 github 上分叉了 homebrew/versions。我从 $(brew --prefix)/Library/Taps 符号链接到我的 fork 的本地工作副本。我将其称为 my-homebrew/versions。我通过将公式指定为 my-homebrew/versions/ 进行了测试。我向 homebrew/versions 发送了一个拉取请求以获取我的新公式。

耶。