如何在自制软件中安装特定版本的公式?例如,postgresql-8.4.4 而不是最新的 9.0。
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
TLDR: brew install [email protected]有关详细信息,请参阅 answer below。
*(我已经重新编辑了我的答案,以提供更彻底的工作流程来安装/使用带有自制软件的旧软件版本。如果您发现旧版本更好,请随时添加注释。)
让我们从最简单的情况开始:
1)检查,版本是否已经安装(但未激活)
当 homebrew 安装一个新公式时,它会将它放在一个版本化的目录中,例如 /usr/local/Cellar/postgresql/9.3.1。然后全局安装此文件夹的符号链接。原则上,这使得在两个已安装版本之间切换非常容易。 (*)
如果您使用自制软件的时间较长并且从未删除过旧版本(例如使用 brew cleanup),那么您的程序的某些旧版本可能仍然存在。如果您只想激活之前的版本,brew switch 是最简单的方法。
使用 brew info postgresql(或 brew switch postgresql )检查是否安装了旧版本:
$ 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.rb 和 HOMEBREW_NO_AUTO_UPDATE=1 brew install go。
自制/版本已弃用
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
简单的工作流程
现在 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 不再受支持。
@dem7w2,您可以使用 brew link --force [email protected] 创建符号链接。如果您已经安装了较新的版本并希望将较旧的版本作为您的默认版本,那么您还需要在其中添加一个 --overwrite。
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
⚠ 此答案在 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 switchis disabled! Use
brew link @-versioned formulae instead.
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
更新: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 之前,brew unlink 。否则,这是(到目前为止)切换到特定版本的公式的最简单、最简洁的方法。
我通过 brew log 轻松找到了地址
我整理了一个网页,用于快速查找每个软件包的历史版本:bagonyi.github.io/brewed
这不再起作用了。 discourse.brew.sh/t/…
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
按照@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 上的稳定点击。``
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
我发现了比其他复杂解决方案更好的替代解决方案。
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
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
嗯,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//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.
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
更新:此方法已弃用,不再有效。
此方法会导致错误:不支持从 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 `'
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 `'
11: from /usr/local/Homebrew/Library/Homebrew/brew.rb:157:in `rescue in '
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 #
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 "[email protected]"
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 软件。
这对我来说是最简单的解决方案。这应该更高,因为接受的答案已经过时。
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
解决方案
brew extract --version=8.4p1 openssh homebrew/cask
brew install openssh@8.4p1
最新的[email protected]在我运行brew upgrade后有bug,所以我通过上述方式成功回退到以前的版本。
截至 2021 年 4 月,这是我能找到的唯一可行且合理的解决方案。谢谢@JsonBruce
这项工作为我工作,2021 年 9 月。我以前做过brew unlink。
这对我有用,2022 年 4 月 19 日。谢谢
这是正确的答案。太感谢了。
如何查看可用版本?
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。
大多数其他答案现在已经过时了。不幸的是,Homebrew 仍然没有安装过时版本的内置方法,除非该版本作为单独的公式存在(例如 python@2、[email protected] …)。
幸运的是,对于其他公式,有一种比过去需要的复杂混乱更简单的方法。以下是完整说明:
在日志中搜索正确的版本: 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 [email protected] 才能使用特定版本的 Bash 或任何其他公式。
他们显然更改了 brew log 的语法,因此任何额外的 -F 或 --grep 选项对我来说都失败了。
@dragon788 该死的地狱,Homebrew 2 完全崩溃了 brew log。我现在懒得写新版本了,因为这需要正确解析 git log 消息,或者直接在相应的存储库上运行 git log。而变更日志似乎甚至没有提到这个重大变化。烦人之余。
除非他们接受行为变化是一个错误,否则似乎可能需要 External Command 在 brew 的结构中运行才能获得该类型的 git log 过滤。 docs.brew.sh/External-Commands
这是我唯一能找到正确 brew extract 用法的地方,谢谢!
我建议让自定义 local0only 点击答案的第一部分。这似乎是整体上最好的解决方案。
huntsbot.com高效搞钱,一站式跟进超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 [email protected] 才能使用您的特定版本的 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/…
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
我刚刚使用 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 公式。感谢您的评论。
原文链接:https://www.huntsbot.com/qa/g1lZ/homebrew-install-specific-version-of-formula?lang=zh_CN&from=csdn
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。