题 Homebrew安装特定版本的公式?


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


1713
2017-10-21 12:58


起源


请遵循以下说明: effectif.com/mac-os-x/...。 - Alex Sharp
检查 stackoverflow.com/a/3949908/3256989 - ultraon
多年来,答案逐渐演变。截至2018年使用 nodejs 举个例子: brew search node@ 然后 brew install node@8 - MarkHu


答案:


我已经重新编辑了我的答案,为安装/使用自制软件的旧软件版本提供了更全面的工作流程。如果您发现旧版本更好,请随意添加备注。

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

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

当自制软件安装新的公式时,它会将它放在一个版本化的目录中 /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月, 自制0.9 为此提供了一种机制: brew tap & 自制版本 库。

该版本存储库可能包含几个公式的旧版本的后端。 (大多数只是大而着名的,但当然他们也会有几个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存储库,因此可以使用plain 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)史前时代

对于特殊需求,我们也可以尝试自己挖掘自制回购。

$ git log -S'8.4.4' -- Library/Formula/postgresql.rb

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

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存储库中。

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

4)手动编写公式

这不是太难,你可以将其上传到 家酿的版本

A.)奖金:固定

如果你想保留某个版本,比如postgresql,那么当你做自然时,不要让它更新 brew update; brew upgrade 程序,你可以  一个公式:

$ brew pin postgresql

固定公式列于 /usr/local/Library/PinnedKegs/ 一旦你想引入最新的更改和更新,你就可以 拔掉闩 它再次:

$ brew unpin postgresql

2120
2017-11-11 20:04



您也可以使用以下方式检查公式 git checkout fa992 -- Library/Formula/postgresql.rb。完成后,您可以使用撤消对公式的更改 git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb。 - mipadi
注意:在新的Homebrew安装上,您可能需要 brew update 建立自己的Git回购。 - Bluu
好像 brew versions 不再工作了吗? - jrmgx
这太荒谬了。 - Dogweather
截至今天,对存储库执行手动命令的正确目录是 cd $(brew --repository)/Library/Taps/homebrew/homebrew-core,那你就可以用了 git checkout 4cce79d -- Formula/go.rb 和 HOMEBREW_NO_AUTO_UPDATE=1 brew install go。 - Calin


简单的工作流程

现在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

633
2018-03-22 23:29



似乎最简单,但当我复制粘贴时,得到 fatal: Not a git repository (or any of the parent directories): .git。我只是 cd 进入目录而不是(没有FORMULANAME.rb),然后做 git checkout 120938 - Ramon Tayag
@RamonTayag,我遇到了同样的问题。务必 cd /usr/local 第一。 - gjb
我发现你需要一步3.5: brew unlink FORMULANAME - Intentss
brew versions <formula> 不再受支持了。 - Emmanuel Joubaud
@ dem7w2,你可以创建符号链接 brew link --force postgresql@9.5。如果您已经安装了较新版本并希望旧版本成为默认版本,那么您需要一个 --overwrite 在那里。 - Ryan


现在有一种更简单的方法来安装以前安装的旧版本的公式。简单地使用

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 只是更改符号链接,它非常快。请参阅Homebrew Wiki下的更多文档 外部命令


425
2017-12-14 16:33



我尝试了这个,它成功地显示了“为/usr/local/Cellar/node/0.4.7创建的33个链接”的消息,但是当我之后运行节点时,它失败并显示消息“-bash:/ usr / local / bin / node:没有这样的文件或目录“。知道什么可能出错吗?注意:我手动下载0.4.7并将其放入地窖目录,因为我不知道如何使用brew下载anyhting但最新的节点版本。 - Soroush Hakami
我希望你知道有一种叫'nvm'的东西[github.com/creationix/nvm]! - Gaurav Agarwal
哇...希望这被选为正确的答案! +1 - Larry
我依赖已安装的软件包版本。如果您缺少该版本,则仍需要应用所选答案。 - Nic Strong
@NicStrong确实, brew switch 依赖已经安装的广受欢迎的版本。不幸的是,目前接受的答案非常无益,令人费解,过时。 那里  是  更好 以下答案是 许多 更有帮助。 - GDP2


更新:2015年1月15日

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

由此 要旨

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

183
2017-07-19 23:42



这是唯一对我有用的东西。非常愚蠢的是,包管理器需要如此多的安装才能安装以前的版本。也许我被ruby RVM和bundler宠坏了,但这个过程确实需要简化和抽象。 - poetmountain
当我试图转到之前版本的Ansible时,我必须在安装之前版本之前取消链接公式,如图所示。所以在做之前 brew install <url>, brew unlink <formulaname>。否则,这是切换到特定版本的公式的最简单,最简洁的方法(到目前为止)。 - bigsweater
工作完美无瑕。 - isHristov
你打了 Raw 什么文件按钮?! - Iulian Onofrei
它可以工作,但有时您必须下载原始.rb文件并更改校验和以避免Homebrew抱怨SHA不匹配。 GitHub似乎在2017年的某个时候重新存档了大部分的回购树,并且它们的校验和发生了变化。 (事实上​​,当Bazel去年7月开始在哈希不匹配方面失败时,我的团队引起了很大的困惑) - Chang Qian


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

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

这将下载并安装PostgreSQL 8.4.8


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

经过一番研究发现,有人收集了一批稀有的配方奶粉。


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

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

93
2017-09-19 11:55



嗯, brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb 似乎失败了语法错误。 - Brian Armstrong
完美无瑕!所有列出的最佳解决方案。 - Nikita Volkov
@BrianArmstrong你指的是文件的html格式版本,而你需要一个 原始版本。 - Nikita Volkov
别忘了 raw在URL中 - Faber
homebrew-versions 已经一去不复返了 core 现在,一般情况是: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb。 COMMIT 可以通过去找到 github.com/Homebrew/homebrew-core/commits/master/Formula/...。 - PJSCopeland


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

  1. 找到您正在寻找的图书馆 https://github.com/Homebrew/homebrew-core/tree/master/Formula
  2. 点击它: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
  3. 单击“历史记录”按钮查看旧提交: https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb
  4. 单击所需的那个:“postgresql:update version to 8.4.4”, https://github.com/Homebrew/homebrew-core/blob/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  5. 点击“原始”链接: https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  6. brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb

51
2017-10-16 22:12



如果它在核心仓库中不可用,这是安装所需版本软件包的最简单方法 package@version - avy
如果您无法使用Web界面,则可以克隆存储库并在本地执行:使用 git log master -- Formula/PACKAGENAME.rb 获取提交历史记录,检查正确的提交,然后运行 brew install Formula/PACKAGENAME.rb 安装它。 - chipbuster
我想你需要 brew unlink 之前 brew install 其他版本。 - studgeek
这是谁 mxcl? - PJSCopeland
我这样做 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. 有任何想法吗? - msciwoj


您可以使用在公式的历史记录中标识公式和特定提交的策略,该策略与您要安装的软件包的版本相匹配。

  1. https://github.com/Homebrew/homebrew-core

  2. t 在键盘上激活文件查找器。

  3. 确定一个看起来最相关的公式,也许: Formula/mysql.rb,将您带到forumla文件位置: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb

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

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

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

  1. 应用提交后,单击“查看”按钮以查看mysql.rb文件的源。

  2. 然后单击“原始”按钮以查看原始源。

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

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

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

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

注意:此答案已更新,以说明删除braumeister.org网站的原因。同样的原则适用,braumeister只是提供了一种初学者友好的方式来导航公式版本。


50
2018-02-24 05:38



不幸的是,这在答案列表中太过分了,但却是最好的解决方案。这是我使用的,除了使用braumeister我只是去我想要的公式的Homebrew GitHub页面(例如,对于gcc去 github.com/Homebrew/homebrew/blob/master/Library/Formula/gcc.rb)然后我浏览文件的“历史”,直到我找到我想要的版本。 - Guy Kogus
在我的情况下,这绝对是最好的解决方案 - 安装不需要Xcode 8.1的旧版Watchman - Zachary Keener
很棒的答案,为我工作 - domoarigato
这是安装旧版本的最简单方法。很好的答案 - Martin M
这对我有用,但我不得不首先将软件取消链接。 - Brett Wagner


我只是用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'......
remote:计数对象:590,完成。
remote:压缩对象:100%(265/265),完成。
远程:总计590(delta 362),重用549(delta 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 --version
Apache Maven 2.2.1(r801777; 2009-08-06 12:16:01-0700)
Java版本:1.6.0_37
Java home:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
默认语言环境:en_US,平台编码:MacRoman
操作系统名称:“mac os x”版本:“10.7.4”arch:“x86_64”系列:“mac”

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

编辑: Apache Maven项目重组了他们的回购。更新了此答案以解释此更改。


27
2018-02-12 20:35



这正是我想要的感谢! - micmcg
很高兴你发现它很有用。 - Cameron Goodale
这非常有帮助。请注意,apache基础已将maven二进制文件重新组织为版本(1,2,3)特定目录,因此您需要编辑maven.rb for 2.2.1以及其他适合新结构的文件。例如,2.2.1的二进制文件位于: apache.org/dist/maven/maven-2/2.2.1/binaries/...。请注意网址中的“maven-2 / 2.2.1 /”。 - Charles Forcey
@CharlesForcey你对正在重组的maven dist repo是正确的。我将更新使用brew tap的答案以使用较旧的maven2公式。感谢您的评论。 - Cameron Goodale


基于描述的工作流程 @tschundeee 和 @ Debilski的更新1,我自动化程序并添加了清理 这个脚本

下载它把它放在你的道路上 brewv <formula_name> <wanted_version>。对于特定的OP,它将是:

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

:)


21
2017-07-09 14:06



太棒了酿造中为什么不这样? - Adrian
@mattisg为什么我只能赞成这一次? - James B
<3你!谢谢你! - Felipe Lima
找不到了:( - D-32


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

$ brew search mongodb
mongodb    mongodb24  mongodb26

然后就做 brew install mongodb26 像平常一样。

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


11
2018-04-30 22:01



虽然这可能会回答这个问题, 这会更好 在这里包括答案的基本部分,并提供参考链接。 - Erik
@Erik谢谢,修好。 - Alex Sharp