自制安装特定版本的公式?

Gra*_*vis 2072 versioning installation homebrew

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

Deb*_*ski 2422

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

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

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

当自制软件安装新的公式时,它会将它放在一个版本化的目录中brew install postgresql@8.4.4.然后,仅全局安装指向此文件夹的符号链接.原则上,这使得在两个已安装的版本之间切换非常容易.(*)

如果你已经使用自制软件更长时间并且从未删除旧版本(例如使用/usr/local/Cellar/postgresql/9.3.1),那么你的程序的某些旧版本可能仍然存在.如果您只想激活之前的版本,brew cleanup最简单的方法就是这样做.

检查brew switch(或brew info 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
Run Code Online (Sandbox Code Playgroud)

我们看到已经安装了一些旧版本.我们可以使用brew switch postgresql <TAB>以下方法激活

$ 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
Run Code Online (Sandbox Code Playgroud)

让我们仔细检查激活的内容:

$ 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
Run Code Online (Sandbox Code Playgroud)

请注意,星星brew switch已移至新激活的版本

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

2)检查该版本是否可用作水龙头

特别是对于较大的软件项目,很可能对某个软件的几个(可能是API不兼容的)主要版本有足够高的需求.截至2012年3月,Homebrew 0.9为此提供了一种机制:brew switch&自制软件版本存储库.

该版本存储库可能包含多个公式的旧版本的后端.(大多数只是大而着名的,但当然他们也会有几个postgresql公式.)

brew tap 会告诉你在哪里看:

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92
Run Code Online (Sandbox Code Playgroud)

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

$ 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
# …
Run Code Online (Sandbox Code Playgroud)

请注意,这已自动按了brew search postgresql水龙头.(检查homebrew/versions,删除brew tap.)以下内容相同:

$ brew tap homebrew/versions
$ brew install postgresql8
Run Code Online (Sandbox Code Playgroud)

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

3)尝试过去的一些公式

列出了以下方法,主要是为了完整性.两者都试图从brew存储库中复活一些不死的公式.由于更改了依赖关系,公式规范中的API更改或仅仅更改了下载URL,因此可能会或可能不会起作用.

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

a)历史时期

20118月到2014年10月期间,自制软件有一个brew untap homebrew/versions命令,它可以使用各自的SHA哈希值吐出所有可用的版本.截至2014年10月,您必须brew versions先使用它才能使用它.正如水龙头的名称所示,你应该只做这个作为最后的手段.

例如

$ 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
Run Code Online (Sandbox Code Playgroud)

如您所见,它建议不要使用它.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
Run Code Online (Sandbox Code Playgroud)

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

$ git checkout -- Library/Formula/postgresql.rb
Run Code Online (Sandbox Code Playgroud)

brew tap homebrew/boneyard 是你的朋友在旧的和新的之间改变.

b)史前时代

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

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
Run Code Online (Sandbox Code Playgroud)

brew switch查找git log -S在文件中添加或删除字符串的所有提交'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
Run Code Online (Sandbox Code Playgroud)

显然,Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb是我们感兴趣的提交.由于这个提交很旧,我们将尝试降级完整的自制软件安装(这样,公式API或多或少保证有效):

$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Run Code Online (Sandbox Code Playgroud)

您可以跳过最后一个命令以将引用保留在git存储库中.

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

4)手动编写公式

这不是太难,您可以将其上传到您自己的存储库.曾经是Homebrew-Versions,但现在已停止使用.

A.)奖金:固定

如果你想保留某个版本,比如postgresql,并在你做自然fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422程序时阻止它被更新,你可以固定一个公式:

$ brew pin postgresql
Run Code Online (Sandbox Code Playgroud)

固定公式列在其中brew update; brew upgrade,一旦您想要引入最新的更改和更新,您可以再次取消固定:

$ brew unpin postgresql
Run Code Online (Sandbox Code Playgroud)

  • 这太荒谬了. (498认同)
  • 似乎'brew版本'不再起作用了吗? (110认同)
  • 截至今天,对存储库执行手动命令的正确目录是`cd $(brew --repository)/ Library/Taps/homebrew/homebrew-core`,那么你可以使用`git checkout 4cce79d - Formula/go .rb`和`HOMEBREW_NO_AUTO_UPDATE = 1 brew install go`. (25认同)
  • 您也可以使用`git checkout fa992 - Library/Formula/postgresql.rb`签出公式.完成后,您可以使用`git revert HEAD Library/Formula/postgresql.rb && git checkout - Library/Formula/postgresql.rb`撤消对公式的更改. (18认同)
  • 注意:在新的Homebrew安装中,您可能需要`brew update`来建立它的Git仓库. (18认同)
  • 不推荐使用homebrew/versions (7认同)
  • 对于更新I,我必须在运行`brew install`部分之前"刷新unlink <formula>` (6认同)
  • 嗨!作为一个Homebrew维护者,我只想清楚支持的方法是使用Homebrew/versions公式或调整公式来安装所需的版本.从git历史记录安装公式无法使其可靠地工作,因为Homebrew生态系统随着时间的推移而发展,这就是删除版本命令的原因.如果它适用于你的开发机器,那很好,但请不要依赖git操作或强大的历史公式.Homebrew的稳定CLI是命令行界面. (6认同)
  • 这个答案具有误导性,因为它指的是当前(2015年5月)brew版本中不存在的命令("which","versions").请@Debilski帮我们一个忙,更新或删除它.谢谢! (5认同)
  • 现在是 2020 年,“brew 版本”不再有效。“未知命令:版本”是我收到的错误。 (4认同)
  • 我是一个brew新手(brewbie?),我为特定的mysql版本运行了`git checkout ...`,但现在是什么?我此时尝试了"brew install mysql",但我得到了`错误:这是一个只有头部的公式; 安装"brew install --HEAD mysql"`.然后我尝试`brew install --HEAD mysql`然后我得到`错误:没有头定义为mysql`.我错过了一些明显的东西吗 (3认同)
  • 这个答案似乎基本上已经失效了。如果没有版本存储库,是否无法下载旧版本? (3认同)
  • 这可能曾经是一个很好的答案,但“版本”已经消失了。 (3认同)
  • `brew` 删除了 `switch` 命令,请参阅 https://github.com/Homebrew/discussions/discussions/339 (3认同)
  • 太长.我们只需要命令即可完成. (2认同)
  • `brew版本'现在消失了.如果您使用的是Option 2,并且需要在`homebrew\versions`中安装的两个版本之间进行切换,那么可以使用这个`brew unlink postgresql8 && brew link postgresql92`. (2认同)
  • 关于3b,`brew --repository`会告诉你homebrew的git存储库在哪里. (2认同)
  • 另外需要注意的是,从4月初开始,主要公式被拆分为一个单独的仓库,因此您不能再像以前那样在`/ usr/local`根目录进行git操作了.我仍然能够在核心公式中进行攻击,这些公式现在是`/ usr/local/Library/Taps/homebrew/homebrew-core`,但正如@TimSmith所指出的那样:这并不是真正支持的crapshoot. (2认同)
  • 在最新版本的自制软件中,即使在我“brew tap homebrew/boneyard”之后。当我`brew versions opencv`时,它仍然会显示`错误:未知命令:版本。任何人都可以帮忙吗? (2认同)
  • `brew tap homebrew/boneyard` - `远程:未找到存储库。致命:未找到存储库“https://github.com/Homebrew/homebrew-boneyard/” (2认同)
  • 看来“酿造开关”现在坏了。我得到:`错误:调用 \`brew switch\` 被禁用!请改用“brew link”@-versioned 公式。 (2认同)

Bij*_*jan 749

简单的工作流程

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

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

$ brew install postgresql@9.5
Run Code Online (Sandbox Code Playgroud)

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

$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ?     postgresql@9.4        postgresql@9.5        postgresql@9.6
Run Code Online (Sandbox Code Playgroud)

  • 不再支持`brew版本<formula>`. (32认同)
  • 我发现你需要一个步骤3.5:`brew unlink FORMULANAME` (12认同)
  • 看起来最简单,但是当我复制和粘贴时,得到'致命:不是git存储库(或任何父目录):.git`.我只是`cd`进入目录(没有FORMULANAME.rb),然后做`git checkout 120938` (8认同)
  • @RamonTayag,我遇到了同样的问题.一定要先'cd/usr/local`. (8认同)
  • @ dem7w2,您可以使用`brew link --force postgresql @ 9.5`创建符号链接.如果您已经安装了较新版本并希望旧版本成为默认版本,那么您也需要一个`--overwrite`. (4认同)
  • @sava-chankov 我无法让 postgresql@9.5 为我工作。它只是小桶,从来没有真正链接到 /usr/local/bin (2认同)
  • 你如何获得可用版本的列表? (2认同)

Tre*_*ham 450

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

brew switch [formula] [version]
Run Code Online (Sandbox Code Playgroud)

例如,我在Node.js 0.4.12和0.6.5之间定期交替:

brew switch node 0.4.12
brew switch node 0.6.5
Run Code Online (Sandbox Code Playgroud)

由于brew switch只是更改符号链接,因此速度非常快.请参阅外部命令下的Homebrew Wiki上的更多文档.

  • 我依赖已安装的软件包版本.如果您缺少该版本,则仍需要应用所选答案. (36认同)
  • 我希望你知道有一个叫'nvm'的东西[https://github.com/creationix/nvm]! (6认同)
  • 哇...希望这被选为正确的答案!+1 (6认同)
  • 确实:“错误:未知命令:开关” (6认同)
  • @NicStrong确实,'brew switch`依赖于已经安装的抢手版本.不幸的是,目前接受的答案非常无益,令人费解,过时.[有](/sf/answers/522937061/)[是](/sf/answers/545139241/)[更好](https://stackoverflow.com/a/ 35594124/2636454)下面的答案*很多*更有帮助. (4认同)
  • 看来“酿造开关”现在坏了。我得到:`错误:调用 \`brew switch\` 被禁用!请改用“brew link”@-versioned 公式。 (4认同)
  • 我尝试了这个,它成功地显示了"为/usr/local/Cellar/node/0.4.7创建的33个链接"的消息,但是当我之后运行节点时,它失败并显示消息"-bash:/ usr/local/bin/node:没有这样的文件或目录".知道什么可能出错吗?注意:我手动下载0.4.7并将其放入地窖目录,因为我不知道如何使用brew下载anyhting但最新的节点版本. (2认同)

Vis*_*hal 240

更新: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 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
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一对我有用的东西.非常愚蠢的是,软件包管理器只需要安装以前的版本就需要这么多.也许我被ruby RVM和bundler宠坏了,但这个过程确实需要简化和抽象. (44认同)
  • 我通过`brew log &lt;formula&gt;`轻松找到了地址 (5认同)
  • 当我试图转到之前版本的Ansible时,我必须在安装之前版本之前取消链接公式,如图所示.所以在做'brew install <url>`之前,`brew unlink <formulaname>`.否则,这是切换到特定版本的公式的最简单,最简洁的方法(到目前为止). (3认同)
  • 我整理了一个网页,用于快速查找每个包的历史版本:https://bagonyi.github.io/brewed/ (3认同)
  • 这不再起作用了。https://discourse.brew.sh/t/has-brew-install-force-formula-raw-path-been-taken-out/8793 (3认同)

hal*_*ube 106

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

brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Run Code Online (Sandbox Code Playgroud)

这将下载并安装PostgreSQL 8.4.8


我找到了这个解决方案,开始按照搜索回购的步骤和回购中的注释.

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


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

brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
Run Code Online (Sandbox Code Playgroud)

  • `homebrew-versions`已经消失,现在所有内容都在`core`上,所以一般情况是:`brew install https://raw.github.com/Homebrew/homebrew-core/ <COMMIT>/Formula/<FORMULA>. rb`.可以通过访问https://github.com/Homebrew/homebrew-core/commits/master/Formula/<FORMULA>.rb找到`COMMIT`. (7认同)
  • @BrianArmstrong你指的是文件的html格式版本,而你需要[原始版本](https://raw.github.com/Homebrew/homebrew-versions/master/node06.rb). (6认同)
  • 看起来它可以工作,但已被弃用,所以很快就会消失`警告:从 GitHub 提交 URL 调用 sshuttle 安装已被弃用!使用“brew extract sshuttle”来稳定 GitHub 上的点击。 (4认同)

Lan*_*ard 104

按照@ 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/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb

  • 如果它在核心仓库中不可用作"package @ version",这是安装所需版本软件包的最简单方法 (7认同)
  • 如果您不能使用Web界面,您可以克隆repo并在本地执行:使用`git log master - Formula/PACKAGENAME.rb`获取提交历史记录,检查正确的提交,然后运行`brew安装Formula/PACKAGENAME.rb`来安装它. (6认同)
  • 如果您无法从 URL 安装,您可以先下载 ruby​​ 文件并从中安装。 (6认同)
  • 我认为在其他版本的"brew install"之前你需要`brew unlink`. (5认同)
  • 不再起作用`无效使用:不支持从 GitHub 提交 URL 安装 carthage!“brew extract carthage”改为 GitHub 上的稳定水龙头。 (4认同)
  • 从 URL 安装曾经被弃用,现在已经不可能了,因为它不安全。 (3认同)
  • 看起来这不再起作用`无效使用:不支持从 GitHub 提交 URL 安装 kubernetes-cli!“brew extract kubernetes-cli”改为 GitHub 上的稳定水龙头。 (3认同)
  • 我执行此“brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb”,但出现错误,可能是由于“@”符号:“错误:无可用”名为“postgresql%409.6”的公式在公式文件中:/Users/maciek/Library/Caches/Homebrew/Formula/postgresql%409.6.rb 期望找到类 Postgresql%4096,但只找到:PostgresqlAT96。`有什么想法吗? (2认同)
  • 同样,只需下载原始 .rb 文件和 `brew install &lt;file&gt;`。 (2认同)

sea*_*cal 75

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

  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-core/commit/c77882756a832ac1d87e7396c114158e5619016c#Formula/mysql.rb

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

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

  2. 然后单击"原始"按钮以查看原始源.

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

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

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

    $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,这在答案列表中太过分了,但却是最好的解决方案.这是我使用的,除了使用braumeister我只是去我想要的公式的Homebrew GitHub页面(例如对于gcc转到https://github.com/Homebrew/homebrew/blob/master/Library/Formula /gcc.rb)然后我浏览文件的"历史",直到我找到我想要的版本. (13认同)
  • 这对我有用,但我不得不首先将软件取消链接. (4认同)
  • 在我的情况下,这绝对是最好的解决方案 - 安装不需要Xcode 8.1的旧版Watchman (3认同)
  • 这是安装旧版本的最简单方法.很好的答案 (3认同)
  • 这对我来说是最简单的解决方案.这应该更高,因为已接受的答案已经过时. (3认同)
  • 不幸的是,这种方法已被 Homebrew 弃用,不再有效。*从 GitHub 提交 URL 调用安装 XXX 被禁用!* (2认同)

Cam*_*ale 29

自从简单brew install maven安装Maven 3.0.3 以来,我刚用Homebrew回到Maven 2.2.1 .

首先,你必须离开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项目重新组织了他们的回购.更新了此答案以解释此更改.


Max*_*ysh 26

意外升级 Postgres?

我的情况:

  • postgresql意外地从 11 升级到 12(brew upgrade无参数运行后)
  • 我想保留 Postgres 11。

解决方案:

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

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

  • 这仅适用于 postgresql@11 的特殊情况,Homebrew 维护者明确保留该情况以帮助数据存储迁移(使用特殊命令“brew postgresql-upgrade-database”执行)。这个答案对于几乎任何其他公式都没有用。 (14认同)

Kon*_*lph 22

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

幸运的是,对于其他公式来说,比以前需要的复杂混乱更容易.以下是完整说明:

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

    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›
    
    Run Code Online (Sandbox Code Playgroud)

    这将显示提交哈希列表.选一个合适的(大多数应该是非常明显的,通常是最新的(即顶部的).

  2. 找到公式驻留在上游存储库中的URL:

    brew info ‹formula› | grep ^From:
    
    Run Code Online (Sandbox Code Playgroud)
  3. 修复网址:

    1. 替换github.comraw.githubusercontent.com
    2. 替换blob/master为我们在第一步中找到的提交哈希.
  4. master通过提交哈希替换先前找到的URL来安装所需的版本,例如:

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
    
    Run Code Online (Sandbox Code Playgroud)

(最后一步可能需要在brew unlink ‹formula›之前运行.)

  • @dragon788 该死的,Homebrew 2 完全破坏了“brew log”。我现在懒得写新版本了,因为这需要正确解析 git log 消息,或者直接在相应的存储库上运行 `git log`。并且变更日志似乎甚至没有提到这个重大变更。除了烦人。 (2认同)

Mat*_*iSG 21

基于@tschundeee@ Debilski的更新1描述的工作流程,我自动化了该过程并在此脚本中添加了清理.

下载它,把它放在你的路径和brewv <formula_name> <wanted_version>.对于特定的OP,它将是:

cd path/to/downloaded/script/
./brewv postgresql 8.4.4
Run Code Online (Sandbox Code Playgroud)

:)

  • 太棒了 为什么不是这个酿造? (4认同)
  • 找不到了:( (3认同)

jid*_*ula 21

其他答案都没有充分涵盖 2022 年的这一点,因此我添加了这些说明,这些说明改编自 Homebrew 维护者对安装特定 Cask 版本的类似问题的答案:https: //stackoverflow.com/a/62765875/6310633

卸载您的公式

brew uninstall <formula>
Run Code Online (Sandbox Code Playgroud)

切换到您的存储库克隆homebrew-core并重置为包含您想要的版本的提交。

cd "$(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula"
git log <formula>.rb # examine recent commits for <formula>
git reset --hard <commit-sha> # reset clone to last known-good commit for <formula>
Run Code Online (Sandbox Code Playgroud)

为您的版本签出一个新分支,这样brew就不会在每个命令后自动刷新master,安装您的公式并固定它。

git checkout -b <formula>-downgrade-<version>
brew install <formula>
brew pin <formula>
Run Code Online (Sandbox Code Playgroud)

清理

git checkout master
brew update
Run Code Online (Sandbox Code Playgroud)

当您准备好升级您的配方时,您可以brew unpin <formula>像往常一样升级。


小智 19

解决方案

brew extract --version=8.4p1  openssh homebrew/cask
brew install openssh@8.4p1
Run Code Online (Sandbox Code Playgroud)

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

  • 如何查看可用版本? (7认同)
  • 对于@Sajjon 的观点,这里唯一缺少的步骤是 `brew unlink &lt;package&gt;` 然后是 `brew link &lt;package@specific.version&gt;` (6认同)
  • 这对我来说很有效,2021 年 9 月。我之前做过“brew unlink”。 (5认同)
  • 截至 2021 年 4 月,这是我能找到的唯一可行且合理的解决方案。谢谢@JsonBruce (2认同)

Mig*_*yes 16

更新后的答案增加了@ lance-pollard已经发布的工作答案.

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

  1. 找到你的公式文件,例如:https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb
  2. 获得从GitHub的历史上犯下版本https://github.com/Homebrew/homebrew-core/commits/master/Formula/terraform.rb或者git log master -- Formula/terraform.rb,如果你在本地克隆回购.
  3. 获得有关公式的提交版本纯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
  4. 安装它: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb


ilo*_*aly 14

这里的其他答案都很好,但是如果您需要安装旧版本的软件包并确保修改软件包名称,则需要采用不同的方法。这在使用脚本(在我的例子中是 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
Run Code Online (Sandbox Code Playgroud)

我在这里写了更多相关内容。


Ale*_*arp 12

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

$ brew search mongodb
mongodb    mongodb24  mongodb26
Run Code Online (Sandbox Code Playgroud)

然后brew install mongodb26就像正常一样.

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


the*_*ine 11

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

  • 找到.rb我的软件的文件(首先转到Formulas,找到我需要的那个,然后单击“History”;对于 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 && brew install ./cmake.rb

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

  • 到 2023 年 1 月仍然有效:–) 我刚刚通过以下方式(重新)安装了最后一个可用的 Atom:`curl -O https://raw.githubusercontent.com/Homebrew/homebrew-cask/4afa5ab933c047a2ae70209fde95a922b1764479/Casks/atom.rb &amp;&amp; brew重新安装 --cask ./atom.rb` 非常感谢! (3认同)
  • 有时你必须想得足够简单,谢谢顺便说一句:D (2认同)

rch*_*dry 9

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

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

  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

  2. 找到包的特定公式文件(.rb). 由于我想降级docker-machine,我可以看到一个docker-machine.rb文件.

  3. 获取此公式文件的版本历史记录.输入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日志条目从最新到最早的日期列出).

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

    git checkout 5970e1 docker-machine.rb

  2. 卸载当前的软件包版本. 只需运行正常的brew命令即可卸载当前版本的软件包.
    防爆.brew uninstall docker-machine

  3. 安装旧的软件包版本 现在,您可以运行正常的brew install命令,它将安装您已签出的公式.防爆.brew install docker-machine

如果需要,您可能需要使用重新链接brew link docker-machine.

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

git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Run Code Online (Sandbox Code Playgroud)

然后你就可以brew uninstall docker-machinebrew install docker-machine获得最新版本,并保持这种前进.


dra*_*788 9

官方方法(从对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.
Run Code Online (Sandbox Code Playgroud)

这将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
Run Code Online (Sandbox Code Playgroud)

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

# 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}')
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

按照公式输出中的说明将其放入您的PATH或将其设置为默认外壳程序。


ffg*_*fgh 8

安装旧的Brew软件包版本(Flyway 4.2.0示例)

查找您的本地自制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 2.7.0)。`brew install` 失败,并显示一条消息,表明不支持从 GitHub 提交 URL 安装。 (4认同)

dem*_*ten 8

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

用法:

brewv.sh formula_name desired_version
Run Code Online (Sandbox Code Playgroud)


Max*_*kin 6

最后一个版本的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)
Run Code Online (Sandbox Code Playgroud)

  • ...如果有人打算为该软件包创建一个版本化的配方. (2认同)

lfe*_*445 6

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

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

从那里,我们可以安装1.6.3sha和raw git url:

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


小智 6

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

cd `brew --prefix`
git log Library/Formula/python.rb
Run Code Online (Sandbox Code Playgroud)

输出如下:

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.

...
Run Code Online (Sandbox Code Playgroud)

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

git checkout cf5da05
brew install python
Run Code Online (Sandbox Code Playgroud)

最后,清理:

git checkout master
Run Code Online (Sandbox Code Playgroud)

  • 生活变化,这个答案是最相关的.不要忘记`HOMEBREW_NO_AUTO_UPDATE`并阅读https://github.com/Homebrew/brew/issues/1188 (2认同)

Emi*_*erg 6

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

> brew edit icu4c
# drops you to editor
Run Code Online (Sandbox Code Playgroud)

在这里,您必须将url,versionsha256(也许也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"
Run Code Online (Sandbox Code Playgroud)

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


Arg*_*nQQ 6

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

# 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
Run Code Online (Sandbox Code Playgroud)

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