我如何酿造链接一个特定的版本?

我有几桶相同的包在 /usr/local/Cellar/libfoo/usr/local/Cellar/libfoo/1.0.1/usr/local/Cellar/libfoo/HEAD/usr/local/Cellar/libfoo/mycopy

我如何酿造链接到一个特定的版本?

143293 次浏览

这可能是截至2022年11月11日的最佳方式。

要安装一个特定的版本,例如 postgreql 9.5,你只需要运行:

$ brew install postgresql@9.5

要列出可用的版本,请使用@:

$ brew search postgresql@
==> Formulae
postgresql                 postgresql@11              postgresql@13              postgresql@9.5             qt-postgresql
postgresql@10              postgresql@12              postgresql@9.4             postgresql@9.6             postgrest


==> Casks
navicat-for-postgresql

家酿2.6.0(2020年12月) :

使用说明:

Usage: brew switch <formula> <version>

例如:

brew switch mysql 5.5.29

您可以通过 info找到系统上安装的版本。

brew info mysql

要查看要安装的可用版本,您可以提供一个无效的版本号,因为 brew 将有助于响应可用版本号:

brew switch mysql 0

更新(15.10.2014) :

brew versions命令已从 brew 中删除,但是,如果您确实希望使用此命令,请首先运行 brew tap homebrew/boneyard

推荐的安装旧版本的方法是从 homebrew/versions回购安装如下:

$ brew tap homebrew/versions
$ brew install mysql55

有关安装旧版本公式的所有方法的详细信息,请阅读 这个答案

例如,如果你已经安装了 php 5.4,它可以通过以下方式切换到 php 5.5:

$ php --version
PHP 5.4.32 (cli) (built: Aug 26 2014 15:14:01)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies


$ brew unlink php54


$ brew switch php55 5.5.16


$ php --version
PHP 5.5.16 (cli) (built: Sep  9 2014 14:27:18)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

brew switch libfoo mycopy

如果将 brew switch安装为 Cellar/<packagename>/下的版本化子目录,则可以使用 brew switch在同一软件包的不同版本之间进行切换

这将列出安装的版本(例如,我有 Cellar/sdl2/2.0.3,我已经编译成 Cellar/sdl2/2.0.4)

brew info sdl2

然后在他们之间切换

brew switch sdl2 2.0.4
brew info

信息现在显示 *紧挨着2.0.4

例如,从源代码安装到 Cellar/<packagename>/<version>

cd ~/somewhere/src/foo-2.0.4
./configure --prefix $(brew --Cellar)/foo/2.0.4
make

检查它的安装位置

make install -n

如果一切正常的话

make install

然后从 cd $(brew --Cellar)进行版本之间的切换。

我用的是 brew version 0.9.5

如果@simon 的回答在某些 Mac 中不起作用,请遵循以下过程。

如果您已经使用以下命令安装了 Swiftgen:

$brew update $brew install swiftgen

然后按照下面的步骤运行旧版本的 Swiftgen。

第一步: brew uninstall swiftgen 步骤2: 导航到: https://github.com/SwiftGen/SwiftGen/releases 并下载版本为 Swift-4.2.0.zip 的 Swift。

在任何目录中解压缩包。

第三步: 在终端中执行下列操作:

$ mkdir -p ~/dependencies/swiftgen
$ cp -R ~/<your_directory_name>/swiftgen-4.2.0/ ~/dependencies/swiftgen
$ cd /usr/local/bin
$ ln -s ~/dependencies/swiftgen/bin/swiftgen swiftgen
$ mkdir ~/Library/Application\ Support/SwiftGen
$ ln -s ~/dependencies/swiftgen/templates/ ~/Library/Application\ Support/SwiftGen/


$ swiftgen --version

您应该得到: SwiftGen v0.0(Stencilv0.8.0,StencilSwiftKit v1.0.0,SwiftGenKit v1.0.1)

enter image description here

如果 brew switch产生错误(在本例中试图切换到节点版本14) :

> brew switch node 14
Error: Calling `brew switch` is disabled! Use `brew link` @-versioned formulae instead.

切换版本的正确方法是:

> brew link --overwrite node@14

遗憾的是,brew switch家酿2.6.0中被弃用(2020年12月)

$ brew switch
Error: Unknown command: switch

TLDR,切换到 package版本 10:

brew unlink package
brew link package@10

使用软件包的另一个版本,例如 node:

  • 首先,确保使用 brew list安装特定的版本。我的软件包是 node(16)和 node@14
➜  ~ brew list
==> Formulae
node
node@14


➜  ~ node -v
v16.1.0
  • 解除当前包的链接: brew unlink node
➜  ~ brew unlink node
Unlinking /usr/local/Cellar/node/16.1.0... 7 symlinks removed.
  • 链接正确的版本
➜  ~ brew link node@14
Linking /usr/local/Cellar/node@14/14.16.1_1... 3857 symlinks created.


If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/node@14/bin:$PATH"' >> ~/.zshrc
➜  ~ node -v
v14.16.1

自制程序删除了 家酿2.6.0中的 brew switch子命令。

brew tap laggardkernel/tap
brew switch --help

Name@version 式

主要有两种方式切换到旧版本的应用程序。

如果这是一个更大的版本变化。自制软件可能已经在回购中创建了一个版本化的软件包。和 gogo@1.10一样,它们是两个不同的公式,安装在两个不同的位置。

# install the old one
brew install go@1.10


# link the executable into /usr/local/bin, or /opt/homebrew/bin
brew link --overwrite --force go@1.10

啤酒开关

但并非每个软件包都有版本化的变体。如果您刚刚升级到新版本,而旧版本仍在系统中,请跳过步骤1、2。

  1. 在这种情况下,搜索 自制核心回购和下载特定的公式。例如 Mysql 8.0.23
  2. 下载 生的文件,并从中安装 brew install /path/to/downloaded/mysql.rb
  3. 现在最新的和旧的8.0.23(相同的公式 mysql)都已经存在,用 brew switch mysql 8.0.23切换(链接)旧版本

brew info mysql将列出所有仍然存在的旧版本。

步骤1,2可以由 brew extract代替,但这需要用户维护自己的水龙头。我不会在这里报道,如果你感兴趣,就搜一下。