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


当前回答

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

幸运的是,对于其他公式,有一种比过去需要的复杂混乱更容易的方法。以下是完整的说明:

在日志中搜索正确的版本:酿造对数公式#使用j/k或箭头键向下/向上滚动#或使用例如/4\.4\.23搜索特定版本#此语法仅适用于2.0之前的Homebrew版本brew log--format=格式:%H\%s-F--grep=♥版本›♥公式›这将显示提交哈希列表。选择一个合适的(通常应该非常明显,并且通常是最近的(即最上面的)。查找公式在上游存储库中驻留的URL:brew info♥formula›|grep^发件人:修复URL:将github.com替换为raw.githubusercontent.com用我们在第一步中找到的提交哈希替换blob/master。通过用提交哈希替换先前找到的URL中的master来安装所需版本,例如:brew安装https://raw.githubusercontent.com/Homebrew/homebrew-core/♥哈希›/公式/♥公式›.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升级,则bash 5将安装在顶部,除非您首先执行了brew-pin bash。相反,为了在没有固定的情况下更流畅,您应该首先使用brew install bash安装最新版本,然后使用brew unlink bash,然后按照上面的脚本安装所需的旧版本,然后用brew switch bash 4.4.23设置到旧版本的符号链接。现在,brew升级不会影响您的Bash版本。您可以编写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在您可以按照上面的示例安装的自定义抽头中。缺点是您可能仍然需要编写unlink bash,然后编写linkbash@4.4.23以便使用特定版本的Bash或任何其他公式。

其他回答

目前,安装特定公式版本的旧方法已被弃用。因此,我们似乎必须使用brew edit[公式]。例如,假设我们要安装icu4c的62.1版本(例如postgresql10.5需要)

> brew edit icu4c
# drops you to editor

在这里,您必须将url、version和sha256(可能也是镜像)更改为相应的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"

然后运行brew重新安装icu4c,最终下载62.1版本。

意外升级Postgres?

我的案例:

postgresql意外地从11升级到12(在运行brew升级后没有参数)我想让Postgres保持11岁。

解决方案:

停止数据库:

brew services stop postgresql

安装Postgres 11:

brew install postgresql@11

启用它:

brew link postgresql@11 --force

(可选)将数据库数据目录从postgres重命名为postgres@11:

cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11

启动数据库:

brew services start postgresql@11

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

我刚刚使用Homebrew返回到Maven 2.2.1,因为简单的brew安装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" 

编辑:您也可以只编写switch maven 2.2.1来切换到不同的版本。

编辑:Apache Maven项目重组了他们的repo。更新此答案以说明此更改。

我创建了一个工具来简化这个答案中规定的过程。

要查找a.b.c版本的软件包pkg,请运行:

$ brew-install-specific pkg@a.b.c

这将列出pkg-homebrew公式中提到给定版本的提交及其GitHub URL。

Matching versions:
1. pkg: update a.b.c bottle.
   https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
2. pkg: release a.b.c-beta
   https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
3. pkg a.b.c
   https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>

Select index: 

验证来自给定URL的提交,并输入所选提交的索引。

Select index: 2
Run:
  brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb

复制并运行给定的命令进行安装。

简单工作流

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