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


当前回答

对于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)

其他回答

这里的其他答案很好,但如果您需要安装较旧版本的软件包并确保修改了软件包名称,则需要另一种方法。当使用脚本(在我的例子中是PHP构建脚本)时,这一点非常重要,这些脚本使用brew前缀package_name来确定要用于编译的目录。

如果您正在使用brew提取,则会在包名称的末尾添加一个版本,这将中断brew前缀查找。

以下是如何在保持原始软件包名称的同时安装较旧的软件包版本:

# 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

我在这里写了更多。

大多数其他答案现在已经过时了。不幸的是,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或任何其他公式。

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

用法:

brewv.sh formula_name desired_version

编辑:2021,由于github安装被弃用,这个答案不再起作用。(感谢蒂姆·史密斯的更新)。

安装旧的酿造包版本(Flyway 4.2.0示例)

查找本地自制程序gitdir或本地克隆homebrew/homebrew内核

cd/usr/local/Homebrew/Library/Taps/Homebrew/Homebrew内核/

OR

git克隆git@github.com:Homebrew/Homebrew-core.git

列出所有可用版本

git log master--Formula/flyway.rb

复制所需版本的提交ID并直接安装

brew安装https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Formula/flyway.rb

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

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

这将下载并安装PostgreSQL 8.4.8


我通过开始遵循搜索回购和回购中的注释的步骤找到了这个解决方案。

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


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

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