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

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


#1楼

基于@tschundeee@Debilski的更新1所述的工作流程,我使该过程自动化并在此脚本中添加了清理功能。

下载它 ,将其放在您的路径中,然后brewv <formula_name> <wanted_version> 。 对于特定的OP,将为:

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

:)


#2楼

更新:2015年1月15日

  • 查找所需软件和版本的提交历史记录。 例如我需要从Docker版本1.4.1切换到1.3.3: https : //github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • 使用此按钮查看文件: 在此处输入图片说明
  • 单击原始按钮: 项目清单
  • 从地址栏中复制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

#3楼

我决定,根据我的更好判断,为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发送了新请求的拉取请求。

好极了。


#4楼

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

#5楼

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

$ brew search mongodb
mongodb    mongodb24  mongodb26

然后像brew install mongodb26一样做brew install mongodb26

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


#6楼

如果您通过brew search <formula>找不到版本,也可以尝试遍历公式的提交日志以找到所需的版本:

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

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

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


#7楼

homebrew/versions的问题在于,必须有人在存储库中列出了该软件的特定版本,您才能使用它。 另外,由于不再支持brew versions ,因此需要其他解决方案。 对于指示使用brew switch解决方案,仅当您尚未进行brew cleanup时才有效,因为该版本需要在计算机上存在。

我有一个想要安装特定版本的docker-machine ,该homebrew/versions未在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 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 。 这将列出该文件的完整提交历史记录。 您将看到如下输出:

...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 5970e1af9b13dcbeffd281ae57c9ab90316ba423commit 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

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

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

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

然后,您可以brew uninstall docker-machinebrew install docker-machine以获得最新版本,并保持这种方式向前发展。


#8楼

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

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

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

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

  1. 应用提交后,单击“查看”按钮以查看mysql.rb文件的源。

  2. 然后单击“原始”按钮以查看原始源。

  3. 复制URL。 另外,您也可以使用mysql.rb文件名自己构建URL,以标识您的公式和该公式的特定版本(由以下URL中的COM标识)。

    https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb

  4. 使用$ brew install [URL from step 7]安装它$ brew install [URL from step 7]

     $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb 

注意:此答案已更新,以说明删除了braumeister.org网站。 遵循相同的原则,braumeister只是提供了一种初学者友好的方式来浏览公式版本。


#9楼

这些都不适合我的情况(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

#10楼

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


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

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

1)检查版本是否已经安装(但尚未激活)

当自制软件安装新公式时,会将其放在/usr/local/Cellar/postgresql/9.3.1类的版本化目录中。 然后,将仅全局安装到该文件夹​​的符号链接。 原则上,这使得在两个已安装版本之间切换非常容易。 (*)

如果您使用Homebrew的时间更长,并且从未删除过旧版本(例如使用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)检查是否可以点击该版本

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

该版本存储库可能包括一些公式的旧版本的反向移植。 (通常只有大型的和著名的,但是它们当然也会有几个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然后才能使用它。 就像水龙头的名称所暗示的那样,您可能应该只在万不得已时才这样做。

例如

$ 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存储库中。

注意事项:签出较早的提交时,您会暂时降级自制软件的安装。 因此,您应该小心,因为自制软件中的某些命令可能与最新版本不同。

4)手动编写公式

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

A.)奖金:固定

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

$ brew pin postgresql

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

$ brew unpin postgresql

#11楼

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


#12楼

我只是将旧版本的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

而已。 也许对任何人都有用。


#13楼

自那以来的最新答案增加了@ 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 URL:如果github.com中的公式链接为https://github.com/Homebrew/homebrew-core/blob/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb ,则您的原始URL将为是: 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

#14楼

安装旧的Brew软件包版本(Flyway 4.2.0示例)

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

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

要么

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


#15楼

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

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

  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或任何其他公式。


#16楼

当前,不赞成使用旧的安装特定公式版本的方法。 因此,似乎我们必须使用brew edit [formula] 。 例如,说我们要安装icu4c62.1版本(例如,对于postgresql 10.5需要)。 那你就得

> brew edit icu4c
# drops you to editor

在这里,您必须将urlversionsha256 (也许还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以最终下载62.1版本。


#17楼

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

用法:

brewv.sh formula_name desired_version

#18楼

官方方法(从对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为了使用猛击或您的特定版本(其他任何配方,你已安装最新版本和较旧版本)。

这种方法的潜在缺点是您不能轻易地在版本之间来回切换,因为按照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或将其设置为默认外壳程序。


#19楼

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

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

然后将9行的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

希望有帮助:)


#20楼

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

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

#21楼

按照@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/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

#22楼

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

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


#23楼

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

首先,您必须将Maven目录留在那里

$ brew unlink maven

使用酿造水龙头命令

$ 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项目重组了他们的仓库。 更新了此答案以说明此更改。


#24楼

简单的工作流程

现在不推荐使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值