自制程序安装特定版本的公式

installation versioning homebrew


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




Answer 1 Debilski


TLDR: brew install postgresql@8.4.4 有关更多详细信息,请参见下面的答案。


*(我对答案进行了重新编辑,以提供更彻底的工作流程,以使用Homebrew安装/使用较旧的软件版本。如果发现较旧的版本更好,请随时添加注释。

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

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)检查,该版本是否可以作为一个tap使用

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

该版本存储库可能包括一些公式的旧版本的反向移植。(通常只有大型的和著名的,但是它们当然也会有几个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)尝试一些过去的公式

以下方法主要是为了完整的列出。这两种方法都试图从酿酒仓库中复活一些未死的公式。由于依赖性的改变、公式规范中API的改变或仅仅是下载URL的改变,事情可能会或可能不会成功。

由于整个公式目录是一个git仓库,我们可以使用普通的git命令安装特定的版本。然而,我们需要找到一种方法来进入旧版本的提交。

a)历史时期

20118月至2014年10月之间,自制软件有一个 brew versions 命令,该命令会吐出所有可用版本及其各自的SHA哈希值。自2014年10月起,您必须先进行 brew tap homebrew/boneyard 然后才能使用它。就像水龙头的名称所暗示的那样,您可能应该只在万不得已时才这样做。

E.g.

$ 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)史前时代

如果有特殊需要,我们也可以尝试自己通过自制回帖进行挖掘。

$ 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安装。所以,你应该小心,因为homebrew中的一些命令可能与最新版本不同。

4)手动编写公式

这并不难,您可以将其上传到自己的存储库中。曾经是Homebrew-Versions,但现在已停产。

A.)奖励:钉钉子

如果您想保留某个特定版本,例如postgresql,并在进行自然 brew update; brew upgrade 时阻止其更新;brew升级程序,您可以固定一个公式:

$ brew pin postgresql

固定的公式在 /usr/local/Library/PinnedKegs/ 中列出,一旦要引入最新的更改和更新,就可以再次取消固定

$ brew unpin postgresql



Answer 2 Bijan


简单的工作流程

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



Answer 3 Trevor Burnham


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

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上的更多文档。




Answer 4 Vishal


更新时间: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
  • 从地址栏中复制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



Answer 5 Lance Pollard


沿用@半立方的建议,这个效果非常好。

  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:将版本更新为8.4.4”,https://github.com/Homebrew/homebrew-core/blob/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  5. 单击“原始”链接:https : //raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  6. brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb