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

Homebrew install specific version of formula?

如何在自制配方中安装特定版本的配方?例如,PostgreSQL-8.4.4而不是最新的9.0。


(我重新编辑了我的答案,以提供一个更全面的工作流,用于安装/使用家庭自制的旧软件版本。如果您发现旧版本更好,请随意添加注释。)好的。

让我们从最简单的情况开始:好的。1)检查版本是否已安装(但未激活)

当homebrew安装新的公式时,它将其放在版本控制的目录中,如/usr/local/Cellar/postgresql/9.3.1。然后,只有指向此文件夹的符号链接才能全局安装。原则上,这使得在两个已安装的版本之间切换非常容易。(*)好的。

如果您已经使用了较长时间的自制程序,并且从未删除过较旧的版本(例如,使用brew cleanup),那么很可能您的程序的某些较旧版本仍然存在。如果您只想激活以前的版本,那么brew switch是最简单的方法。好的。

检查brew info postgresqlbrew switch postgresql 是否安装了旧版本:好的。

1
2
3
4
5
6
7
8
9
10
$ 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激活它:好的。

1
2
3
4
$ 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

让我们再次检查激活的内容:好的。

1
2
3
4
5
6
7
8
9
10
$ 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)检查版本是否可用作抽头

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

该版本存储库可能包含多个公式的旧版本的后端。(主要是大型的和著名的,但当然他们也将有几个公式的PostgreSQL。)好的。

brew search postgresql将向您展示到哪里:好的。

1
2
3
4
$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

我们只需键入好的。

1
2
3
4
5
6
7
8
9
10
11
$ 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一起删除)以下内容是等效的:好的。

1
2
$ brew tap homebrew/versions
$ brew install postgresql8

只要后台版本公式保持最新,这种方法可能是处理旧软件的最佳方法。好的。3)尝试一些过去的公式

下面列出的方法主要是为了完整性。两者都试图从BREW存储库中恢复一些亡灵公式。由于依赖关系发生了变化,公式规范中的API发生了变化,或者只是下载URL发生了变化,所以可能会起作用,也可能不会起作用。好的。

因为整个公式目录是一个git存储库,所以可以使用普通的git命令安装特定的版本。但是,我们需要找到一种方法来提交旧版本可用的内容。好的。

a)历史时期好的。

在2011年8月至2014年10月期间,Homebrew有一个brew versions命令,它使用各自的sha散列来释放所有可用版本。截至2014年10月,您必须先执行brew tap homebrew/boneyard,然后才能使用它。正如水龙头的名字所暗示的那样,你应该只做最后的选择。好的。

例如。好的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ 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

如你所见,它建议不要使用它。自制啤酒吐出所有版本,它可以找到与内部启发式,并向您展示了一种方法,检索旧的公式。让我们试试看。好的。

1
2
3
4
5
6
# 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版本,我们可以重新安装最新的公式,以保持我们的存储库干净:好的。

1
$ git checkout -- Library/Formula/postgresql.rb

江户十一〔二〕是你新旧交替的朋友。好的。

b)史前时代好的。

为了满足特殊需要,我们也可以尝试自己的自酿回购。好的。

1
$ git log -S'8.4.4' -- Library/Formula/postgresql.rb

git log -S查找文件Library/Formula/postgresql.rb中添加或删除字符串'8.4.4'的所有提交。结果我们得到两个承诺。好的。

1
2
3
4
5
6
7
8
9
10
11
12
13
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或多或少保证有效):好的。

1
2
3
4
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4

您可以跳过最后一个命令,将引用保存在Git存储库中。好的。

一个注意事项:当签出旧的提交时,您会暂时降级您的自制安装。因此,您应该小心,因为自制程序中的某些命令可能与最新版本不同。好的。4)手工编写公式

这并不难,然后您可以将其上载到自己的存储库中。以前是自制版本,但现在已经停产了。好的。a.)奖金:固定

如果你想保留某个版本,比如postgresql,在执行自然的brew update; brew upgrade过程时阻止它被更新,你可以输入一个公式:好的。

1
$ brew pin postgresql

固定公式列在/usr/local/Library/PinnedKegs/中,一旦您希望引入最新的更改和更新,可以再次取消固定公式:好的。

1
$ brew unpin postgresql

好啊。


简单工作流

现在,homebrew/版本已被弃用,homebrew/core支持具有新命名格式的公式的多个版本。

要安装特定版本,例如PostgreSQL 9.5,只需运行:

1
$ brew install [email protected]

要列出可用版本,请使用@运行搜索:

1
2
3
$ brew search postgresql@
==> Searching local taps...
[email protected] ?     [email protected]        [email protected]        [email protected]


现在有一种更简单的方法来安装以前安装的公式的旧版本。简单使用

1
brew switch [formula] [version]

例如,我定期在node.js 0.4.12和0.6.5之间切换:

1
2
brew switch node 0.4.12
brew switch node 0.6.5

由于brew switch只是改变了符号链接,所以速度非常快。请参阅外部命令下的自制wiki上的更多文档。


更新时间: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 (可能必须先到brew unlink,如brew unlink docker)
  • brew switch docker 1.3.3
  • 切换回Docker 1.4.1 brew switch docker 1.4.1

从这个要点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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


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

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

这将下载并安装PostgreSQL 8.4.8

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

经过一点研究发现,有人收集了一些罕见的处方药来酿造。

如果你在找MySQL5.1.x,试试看。

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


按照@halfcube的建议,这非常有效:

  • 找到你要找的图书馆https://github.com/homebrew/homebrew-core/tree/master/formula
  • 点击:https://github.com/homebrew/homebrew-core/blob/master/formula/postgresql.rb
  • 单击"历史记录"按钮查看旧提交:https://github.com/homebrew/homebrew-core/commits/master/formula/postgresql.rb
  • 点击您想要的:"PostgreSQL:update version to 8.4.4",https://github.com/homebrew/homebrew-core/blob/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/library/formula/postgresql.rb
  • 点击"raw"链接:https://raw.githubusercontent.com/homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/library/formula/postgresql.rb
  • brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb

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

  • 访问https://github.com/homebrew/homebrew-core

  • 按键盘上的t启动文件查找程序。

  • 确定一个看起来最相关的公式,可能是:Formula/mysql.rb,将您带到forumla文件位置:https://github.com/homebrew/homebrew-core/blob/master/formula/mysql.rb。

  • 点击位于https://github.com/homebrew/homebrew-core/commits/master/formula/mysql.rb的History按钮查看修订历史。如果您对MySQL5.7.10感兴趣,可以单击5.7.11之前的最新版本,该版本导航到Github提交:

    https://github.com/homebrew/homebrew-core/commit/c77882756a832ac1d87e739c114158e5619016c formula/mysql.rb

  • 注意:如果没有在浏览器中加载提交历史记录,则可能需要根据Github的建议在控制台中查看提交历史记录。如果您对在GitHub上看到提交感兴趣,请替换URL中的上述提交sha。或者,跳到下面的步骤7。

  • 应用提交后,单击"查看"按钮查看mysql.rb文件的源代码。

  • 然后单击"原始"按钮查看原始源。

  • 复制URL。或者,使用mysql.rb文件名自己构建URL,以标识您的公式和该公式的特定版本(由下面URL中的commmit sha标识)。

    https://raw.githubusercontent.com/homebrew/homebrew-core/c77882756a832ac1d87e739c114158e5619016c/formula/mysql.rb

  • $ brew install [URL from step 7]安装

    1
    $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
  • 注意:此答案已更新为删除braumeister.org网站的原因。同样的原理也适用,Braumeister只是提供了一种初学者友好的方法来导航公式版本。


    因为简单的brew install maven安装了Maven3.0.3,所以我只是使用自制返回Maven2.2.1。

    首先你必须离开马文的方向,所以

    1
    $ brew unlink maven

    使用BREW TAP命令

    1
    2
    3
    4
    5
    6
    7
    8
    $ 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公式:

    1
    2
    3
    4
    $ 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
    1
    2
    3
    4
    5
    6
    $ 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切换到其他版本。

    编辑:ApacheMaven项目重组了他们的回购协议。已将此答案更新为此更改的帐户。


    基于@tschundeee和@deblski的更新1所描述的工作流,我自动执行了该过程,并在此脚本中添加了清理。

    下载,放在你的路径和brewv 中。对于特定的操作,它将是:

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

    :)


    更新后的答案增加了@lance pollard已经发布的工作答案。

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

  • 查找公式文件,例如:https://github.com/homebrew/homebrew-core/blob/master/formula/terraform.rb
  • 如果您在本地克隆了repo,请使用https://github.com/homebrew/homebrew-core/commit s/master/formula/terraform.rb或git log master -- Formula/terraform.rb从github的历史记录中获取提交版本。
  • 使用公式的提交版本获取原始Git URL:如果github.com中的公式链接为https://github.com/homebrew/homebrew-core/blob/e4ca4d2c412994f9f1cb14993be5b2c59a/formula/terraform.rb,则原始URL为:https://raw.githubusercontent.com/homebrew/homebrew-core/e4ca4d24c1412994f9f1c14993be5b2c59a/formula/terraform.rb
  • 安装时:brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb

  • 在最新版本的自制啤酒(本文撰写时为0.9.5)上,将为您要安装的自制啤酒桶提供一个特定的配方。例子:

    1
    2
    $ brew search mongodb
    mongodb    mongodb24  mongodb26

    然后像正常一样做brew install mongodb26

    如果您已经安装了最新版本,请确保取消链接最新版本并链接所需版本:brew unlink mongodb && brew link mongodb26


    到目前为止,大多数其他答案都已过时。不幸的是,自制仍然没有安装过时版本的内置方法,除非该版本作为单独的公式存在(例如,python@2[email protected]…)。

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

  • 在日志中搜索正确的版本:

    1
    2
    3
    4
    5
    6
    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?

    这将显示提交哈希列表。选择一个合适的(大部分应该是非常明显的,通常是最新的(即最上面的)一个。

  • 查找公式位于上游存储库中的URL:

    1
    brew info ?formula? | grep ^From:
  • 修复URL:

  • raw.githubusercontent.com替换github.com
  • blob/master替换为第一步中找到的提交哈希。
  • 通过将先前找到的URL中的master替换为commit散列来安装所需的版本,例如:

    1
    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/?hash?/Formula/?formula?.rb
  • (最后一步可能需要在之前运行brew unlink ?formula?。)

    如果复制了要使用的提交哈希,则可以使用类似于此示例的方法安装该版本,将值和bash替换为提交哈希和所需的公式。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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获取可切换到的版本列表。

    另一种方法是使用自定义的仅本地点击

    实现相同目标的另一种方法似乎是:

    1
    2
    3
    4
    5
    6
    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 [email protected]
    # 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.

    这将在您的自定义tap中创建一个formula@version,您可以根据上面的示例进行安装。缺点是,您可能仍然需要brew unlink bash,然后brew link [email protected],以便使用您特定版本的bash或任何其他公式。


    homebrew/versions的问题在于,必须有人将特定版本的软件列在存储库中,以便您能够使用它。此外,由于不再支持brew versions,因此需要另一种解决方案。对于指示使用brew switch的解决方案,只有当您没有执行brew cleanup时,这才有效,因为该版本需要存在于您的计算机上。

    我有一个问题想安装一个特定的旧版本的docker-machine,它没有在homebrew/versions中列出。我用下面的方法解决了这个问题,它也适用于任何BREW安装的软件。下面的示例将使用docker-machine作为我要从0.5.0版降级到0.4.1版的包。

  • 进入自制的Formula目录。您可以通过运行brew info [any package name]来确定这一点。例如,brew info docker-machine给了我一条显示我的线一条路径-/usr/local/Cellar/docker-machine/0.5.0。这告诉我,在我的机器上,自制啤酒安装在/usr/localFormula上。目录默认位于/usr/local/Library/Formula

  • 找到包的特定公式文件(.rb)。因为我想降级docker-machine,所以我可以看到docker-machine.rb文件。

  • 获取此公式文件的版本历史记录。输入git log docker-machine.rb。这将列出此文件的完整提交历史记录。您将看到如下输出:

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        ...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标签提交的:commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423。上面的提交从0.5.0版开始(Git日志条目是从最新到最早的日期列出的)。

  • 获取公式文件的早期版本。使用步骤3中的commit标记(您可以使用前6个字符),您可以使用以下方法获取旧版本的公式文件:

    git checkout 5970e1 docker-machine.rb

  • 卸载当前的包版本。只需运行正常的BREW命令即可卸载软件包的当前版本。如brew uninstall docker-machine

  • 安装旧的软件包版本现在,您可以运行正常的BREW安装命令,它将安装您已签出的公式。如brew install docker-machine

  • 如有必要,您可能需要使用brew link docker-machine重新连接。

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

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

    然后,您可以使用brew uninstall docker-machinebrew install docker-machine来获取最新版本,并保持这一趋势。


    对于最后一个版本的BREW,可以非常容易地做到这一点。

    1
    2
    3
    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)


    这些都不适用于我的案例(python),因此我将添加我的2分:

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

    输出如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de
    Author: Dominyk Tiller <[email protected]>
    Date:   Thu Jun 30 17:42:18 2016 +0100

        python: clarify pour_bottle reason

    commit cb3b29b824a264895434214e191d0d7ef4d51c85
    Author: BrewTestBot <[email protected]>
    Date:   Wed Jun 29 14:18:40 2016 +0100

        python: update 2.7.12 bottle.

    commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0
    Author: Rakesh <[email protected]>
    Date:   Wed Jun 29 10:02:26 2016 +0530

        python 2.7.12

        Closes #2452.

        Signed-off-by: Tim D. Smith <[email protected]>

    commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
    Author: BrewTestBot <[email protected]>
    Date:   Fri Jun 17 20:14:36 2016 +0100

        python: update 2.7.11 bottle.

    ...

    我想要版本2.7.11,所以我的哈希是cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(简称cf5da05)。接下来,我检查该版本并安装公式python

    1
    2
    git checkout cf5da05
    brew install python

    最后,清理:

    1
    git checkout master


    安装旧的BREW软件包版本(Flyway 4.2.0示例)在本地查找本地的homebrew git dir或克隆homebrew/homebrew core

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

    git clone [email protected]:Homebrew/homebrew-core.git

    列出所有可用版本

    git log master -- Formula/flyway.rb

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

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


    如果在brew search 中找不到您的版本,您还可以尝试查看公式的提交日志,以找到您想要的版本:

    以下是通过BREW安装旧版nginx的示例:

    • NGXNX公式提交日志

    • nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049

    从那里,我们可以安装带有sha和raw git url的1.6.3

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


    目前,安装特定公式版本的旧方法已被弃用。所以我们似乎必须使用brew edit [formula]。例如,假设我们要安装一个62.1版本的icu4c(对于postgresql 10.5)。那你就得

    1
    2
    > brew edit icu4c
    # drops you to editor

    在这里,您必须将urlversionsha256(也可能是mirror)更改为相应的62.1字符串。

    1
    2
    3
    4
    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最终下载62.1版本。


    我试过这里的大多数解决方案,它们都过时了。我必须把这里的一些想法和我自己的工作结合起来。因此,我创建了一个脚本来帮助我完成繁重的工作,您可以在这里找到。

    用途:brewv.sh formula_name desired_version


    我刚刚把旧版本的ElasticSearch复制到了/usr/local/Cellar/elasticsearch目录中。

    1
    2
    3
    $ 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

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


    将library/formula/postgresql.rb第8行更新为

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

    和MD5在第9行到

    1
    fcc3daaf2292fa6bf1185ec45e512db6

    保存并退出。

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

    现在,在这个阶段,您可能会遇到postgresql could not create shared memory segment错误,要解决更新/etc/sysctl.conf的问题,请如下所示:

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

    再试一次initdb /usr/local/var/postgres,应该运行平稳。

    启动时运行PostgreSQL

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

    希望有帮助:)


    我决定为Maven 3.1.1创建一个公式,这与我更好的判断相反,homebrew/versions没有。这样做:

  • 我在Github上用叉子叉了homebrew/versions
  • 我把$(brew --prefix)/Library/Taps与我的叉子的本地工作副本进行了符号链接。我叫这个my-homebrew/versions
  • 我通过指定公式为my-homebrew/versions/进行了测试。
  • 我向homebrew/versions发送了一个新配方奶粉的请求。
  • 是的。


    官方方法(根据对https://github.com/homebrew/brew/issues/6028的响应判断)

    不幸的是,自制仍然没有安装旧版本的明显内置方式。

    幸运的是,对于大多数的公式来说,有一种比以前需要的复杂混乱更容易的方法。以下是以bash为例的完整说明:

    1
    2
    3
    4
    5
    6
    7
    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 [email protected]
    # 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.

    这将在您的自定义tap中创建formula@version,您可以根据上面的示例进行安装。一个重要的注意事项是,如果您以前安装了公式的默认/最新版本,然后安装了brew link [email protected],则可能需要使用brew unlink bash,以便使用您的特定版本的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行,以使用您所需的版本和公式名称进行更新,然后按原样复制和粘贴其余的行,它将使用这些变量来实现魔力。

    1
    2
    3
    4
    5
    6
    # 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

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

    1
    2
    3
    4
    5
    # 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}')

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

    1
    2
    3
    4
    5
    6
    7
    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

    按照公式输出中的指示将其放入路径或设置为默认shell。


    对于当前不在默认BREW公式中的版本,您可以使用https://github.com/buildtools-version-taps/homebrew-versions-tap-tool中的工具轻松创建自己的tap。