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

时间:2010-10-21 12:58:19

标签: installation versioning homebrew

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

31 个答案:

答案 0 :(得分:2311)

答案 1 :(得分:725)

简单工作流程

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

答案 2 :(得分:443)

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

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只是更改了符号链接,因此速度非常快。请参阅External Commands下的Homebrew Wiki上的进一步文档。

答案 3 :(得分:217)

更新: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网址)
  • brew install <url>(可能必须先brew unlink,例如brew unlink docker
  • brew switch docker 1.3.3
  • 切换回docker 1.4.1 brew switch docker 1.4.1

从此gist

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

答案 4 :(得分:101)

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

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

这将下载并安装PostgreSQL 8.4.8


我找到了这个解决方案,开始按照搜索回购和回购中comment的步骤进行操作。

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


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

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

答案 5 :(得分:81)

按照@ 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:更新版本到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/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb

答案 6 :(得分:69)

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

  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. 点击位于https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rbHistory按钮,查看修订历史记录。如果您对MySQL 5.7.10感兴趣,可能需要单击5.7.11之前的最新版本,该版本导航到GitHub提交:

    https://github.com/Homebrew/homebrew-core/commit/c77882756a832ac1d87e7396c114158e5619016c#Formula/mysql.rb

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

    1. 点击&#34;查看&#34;按钮,在应用提交后查看mysql.rb文件的源。

    2. 然后点击&#34; Raw&#34;按钮查看原始来源。

    3. 复制网址。或者,使用mysql.rb文件名自行构建URL,以标识您的公式和该公式的特定版本(由下面的URL中的提交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
      
    5. 注意:此答案已更新,以便删除braumeister.org网站。同样的原则适用,braumeister只是提供了一种初学者友好的方式来导航公式版本。

答案 7 :(得分:28)

我刚刚使用Homebrew回到Maven 2.2.1,因为简单的brew install maven安装了Maven 3.0.3。

首先你必须离开maven dir所以

$ 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项目重组了他们的回购。更新了此答案以解释此更改。

答案 8 :(得分:21)

根据@tschundeee@Debilski’s update 1描述的工作流程,我自动执行了该过程,并在this script中添加了清理工作。

Download it,将其放在您的路径中brewv <formula_name> <wanted_version>。对于具体的OP,它将是:

cd path/to/downloaded/script/
./brewv postgresql 8.4.4

:)

答案 9 :(得分:20)

意外升级了Postgres?

我的情况:

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

解决方案:

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

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

答案 10 :(得分:16)

解决方案

brew extract --version=8.4p1  openssh homebrew/cask
brew install openssh@8.4p1

我运行openssl@8.5p1后最新的brew upgrade有bug,所以我通过上面的方式成功回退到了之前的版本。

答案 11 :(得分:15)

更新的答案,因为这增加了@ lance-pollard已经发布的工作答案。

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

  1. 找到您的公式文件,例如:https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb
  2. 如果您已在本地克隆了回购,请使用https://github.com/Homebrew/homebrew-core/commits/master/Formula/terraform.rbgit log master -- Formula/terraform.rb从github的历史记录中获取提交版本。
  3. 使用公式的提交版本获取原始git网址:如果github.com中的公式链接为https://github.com/Homebrew/homebrew-core/blob/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb,则原始网址为: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

答案 12 :(得分:13)

到目前为止,大多数其他答案已过时。不幸的是,除非有单独的公式(例如python@2postgresql@9.4…)存在,否则Homebrew还没有内置的方法来安装过时的版本。

幸运的是,对于其他公式,有一种比过去必不可少的混乱麻烦的方法。这是完整的说明:

  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›
    

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

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

    brew info ‹formula› | grep ^From:
    
  3. 修复网址:

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

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.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 upgrade,则bash 5会被安装在顶部,除非您首先执行brew pin bash。相反,要使此过程更平滑而无需固定,您应该首先使用brew install bash安装最新版本,然后使用brew unlink bash,然后根据上述脚本安装所需的旧版本,然后使用brew switch bash 4.4.23进行设置链接到较旧版本的符号链接。现在brew upgrade应该不会影响您的Bash版本。您可以brew 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,您可以按照上述示例进行安装。缺点是您可能仍然需要先brew unlink bash,然后brew link bash@4.4.23,才能使用特定版本的Bash或任何其他公式。

答案 13 :(得分:10)

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

  • 为我的软件找到 .rb 文件(首先转到 Formulas,找到我需要的那个,然后单击“历史”;对于 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 文件。

答案 14 :(得分:8)

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。这将列出此文件的完整提交历史记录。您将看到如下输出:

  4.     ...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

    4. 如有必要,您可能需要使用brew link docker-machine重新关联。

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

      git reset HEAD docker-machine.rb
      git checkout -- docker-machine.rb
      

      然后,您可以brew uninstall docker-machinebrew install docker-machine获取最新版本并保持这种状态。

答案 15 :(得分:6)

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

cd `brew --prefix`
git log Library/Formula/python.rb

输出如下:

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.

...

我想要版本2.7.11,因此我的哈希值为cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(或简称为cf5da05)。接下来,我查看该版本并安装公式python

git checkout cf5da05
brew install python

最后,清理:

git checkout master

答案 16 :(得分:6)

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

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

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

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

答案 17 :(得分:6)

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

在本地找到您当地的自制git目录或克隆Homebrew / homebrew-core

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/

OR

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

答案 18 :(得分: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)

答案 19 :(得分:4)

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

用法:

brewv.sh formula_name desired_version

答案 20 :(得分:2)

当前不建议使用安装特定公式版本的旧方法。因此,似乎我们必须使用brew edit [formula]。例如。例如,我们要安装62.1的{​​{1}}版本(例如icu4c的需求)。然后,您必须

postgresql 10.5

在这里,您必须将> brew edit icu4c # drops you to editor urlversion(也许还有sha256)更改为相应的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" 以最终下载brew reinstall icu4c版本。

答案 21 :(得分:2)

正式方法(从对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.

这会在您自定义的水龙头中创建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

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

# 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}')

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

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

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

答案 22 :(得分:1)

将Library / Formula / postgresql.rb第8行更新为

http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2

和第5行的MD5

fcc3daaf2292fa6bf1185ec45e512db6

保存并退出。

brew install postgres
initdb /usr/local/var/postgres

现在,在此阶段您可能会遇到postgresql could not create shared memory segment错误,要解决此问题,请更新/etc/sysctl.conf

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216

再次尝试initdb /usr/local/var/postgres,它应该顺利运行。

在开始时运行postgresql

launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist

希望有所帮助:)

答案 23 :(得分:1)

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

I wrote more about this here.

答案 24 :(得分:1)

这是我如何降级 KOPS(不支持版本控制)

# brew has a git repo on your localhost
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core

git remote -v
origin  https://github.com/Homebrew/homebrew-core (fetch)
origin  https://github.com/Homebrew/homebrew-core (push)

# find the version of kops.rb you need
git log Formula/kops.rb

# checkout old commit
# kops: update 1.18.1 bottle.
git checkout 2f0ede7f27dfc074d5b5493894f3468f27cc73f0 -- Formula/kops.rb

brew unlink kops
brew install kops

# now we have old version installed
ls -1 /usr/local/Cellar/kops/
1.18.1
1.18.2

which kops
/usr/local/bin/kops
ls -l /usr/local/bin/kops
/usr/local/bin/kops -> ../Cellar/kops/1.18.1/bin/kops
kops version
Version 1.18.1

# revert to the newest version
brew uninstall kops
git checkout -f
brew link kops
kops version
Version 1.18.2

答案 25 :(得分:1)

brew versionsbrew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-HASH>/Formula/<Formula>.rb现在不受支持。

您可以尝试这样:

$ brew extract --version 5.6.2 gradle vitahlin/core
$ brew install gradle@5.6.2

答案 26 :(得分:1)

我创建了a tool来简化this answer中规定的过程。

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

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

这将列出pkg自制公式中的提交,其中提及给定版本及其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

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

答案 27 :(得分:1)

我刚刚将一个旧版本的elasticsearch复制到/usr/local/Cellar/elasticsearch目录中。

$ mkdir /usr/local/Cellar/elasticsearch/5.4.3/bin
$ cp elasticsearch /usr/local/Cellar/elasticsearch/5.4.3/bin
$ brew switch elasticsearch 5.4.3

那就是它。 也许它对任何人都有用。

答案 28 :(得分:0)

对于目前不在默认brew系列中的版本,您可以使用https://github.com/buildtools-version-taps/homebrew-versions-tap-tool

中的工具轻松创建自己的点击

答案 29 :(得分:0)

这是我对此的简单回答 - 对此没有内置解决方案真的很生气,所以我构建了自己的懒惰“脚本”。欢迎投稿???

# 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

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

答案 30 :(得分:0)

根据我的判断,我决定为Maven 3.1.1创建一个homebrew/versions没有的公式。要做到这一点:

  1. 我在github上分叉homebrew/versions
  2. 我从$(brew --prefix)/Library/Taps符号链接到我的fork的本地工作副本。我会称之为my-homebrew/versions
  3. 我通过将公式指定为my-homebrew/versions/<formula>来测试。
  4. 我向homebrew/versions发送了拉取请求以获取我的新公式。
  5. 耶。