Answers:
TLDR: brew install postgresql@8.4.4
有关更多详细信息,请参见下面的答案。
*(我对答案进行了重新编辑,以提供更彻底的工作流程,以使用Homebrew安装/使用较旧的软件版本。如果发现较旧的版本更好,请随时添加注释。)
让我们从最简单的情况开始:
当自制软件安装新公式时,会将其放在版本化目录中,例如/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
当一个人想要在相距不远的两个版本之间切换时,使用最有用。
特别是对于大型软件项目,很可能对某个软件的几个主要版本(可能与API不兼容)有足够高的需求。从2012年3月开始,Homebrew 0.9为此提供了一种机制:brew tap
&homebrew版本存储库。
该版本存储库可能包括一些公式的旧版本的反向移植。(通常只有大型的和著名的,但是它们当然也会有几个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
只要向后移植的版本公式保持最新,此方法就可能是处理较旧软件的最佳方法。
列出以下方法主要是出于完整性考虑。两者都试图从酿造库中复活一些不死配方。由于依赖关系的更改,公式规范中的API更改或下载URL的更改,事情可能会或可能不会起作用。
由于整个公式目录是一个git存储库,因此可以使用纯git命令安装特定版本。但是,我们需要找到一种在旧版本可用的情况下进行提交的方法。
a)历史时期
在2011年8月至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
查找'8.4.4'
文件中添加或删除了字符串的所有提交Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb
。结果是两次提交。
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存储库中。
注意事项:签出较旧的提交时,您会暂时降级自制软件的安装。因此,您应该小心,因为自制软件中的某些命令可能与最新版本不同。
这并不难,您可以将其上传到自己的存储库中。曾经是Homebrew-Versions,但现在已停产。
如果要保留某个特定版本(例如postgresql),并在执行自然brew update; brew upgrade
过程时阻止其更新,则可以固定公式:
$ brew pin postgresql
固定的公式已列出,/usr/local/Library/PinnedKegs/
一旦您要引入最新的更改和更新,就可以再次取消固定:
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb
。完成后,您可以使用撤消对公式的更改git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
。
brew update
建立其Git存储库。
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
,然后可以使用git checkout 4cce79d -- Formula/go.rb
和HOMEBREW_NO_AUTO_UPDATE=1 brew install go
。
现在不推荐使用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
fatal: Not a git repository (or any of the parent directories): .git
。我只是cd
进入目录(没有FORMULANAME.rb),然后执行git checkout 120938
cd /usr/local
要先。
brew unlink FORMULANAME
brew versions <formula>
不再受支持。
brew link --force postgresql@9.5
。如果您已经安装了较新的版本,并且希望将较旧的版本作为默认版本,则也需要--overwrite
在其中提供一个。
现在,有一种更简便的方法来安装以前安装的公式的旧版本。只需使用
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上的更多文档。
更新:2015年1月15日
brew install <url>
(brew unlink
例如,可能必须先brew unlink docker
)brew switch docker 1.3.3
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
brew install <url>
,brew unlink <formulaname>
。否则,这是迄今为止切换到特定版本公式的最简单,最简洁的方法。
Raw
按了什么文件上的按钮?!
brew log <formula>
按照@halfcube的建议,这确实非常有效:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
git log master -- Formula/PACKAGENAME.rb
以获取提交历史记录,签出正确的提交,然后运行brew install Formula/PACKAGENAME.rb
以进行安装。
brew unlink
之前brew install
。
mxcl
谁啊
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
但是得到了错误,可能是由于@
签名:Error: No available formula with the name "postgresql%409.6" In formula file: /Users/maciek/Library/Caches/Homebrew/Formula/postgresql%409.6.rb Expected to find class Postgresql%4096, but only found: PostgresqlAT96.
任何想法?
我发现了比其他复杂解决方案更好的替代解决方案。
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
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
似乎因语法错误而失败。
raw
URL中的
homebrew-versions
是走了,一切都上core
了,所以一般情况下是:brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
。COMMIT
可以通过访问github.com/Homebrew/homebrew-core/commits/master/Formula/…找到。
您可以使用识别公式的策略以及公式历史记录中与您要安装的软件包版本匹配的特定提交。
按t
键盘上的激活文件查找器。
确定一个看起来最相关的公式,也许是:Formula/mysql.rb
将您带到forumla文件位置:https : //github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb。
通过单击History
按钮查看修订历史,该按钮位于https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb。如果您对MySQL 5.7.10感兴趣,则可能要单击5.7.11之前的最新版本,该版本导航到GitHub提交:
注意:如果未在浏览器中加载提交历史记录,则可能必须根据GitHub的建议在控制台中查看提交历史记录。如果您有兴趣在GitHub上查看该提交,请在URL中替换上面的提交SHA。或者,跳到下面的步骤7。
应用提交后,单击“查看”按钮以查看mysql.rb文件的源。
然后单击“原始”按钮以查看原始源。
复制URL。另外,您也可以使用mysql.rb
文件名以标识您的公式和该公式的特定版本(由以下URL中的COM标识)。
用安装 $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
注意:此答案已更新,以说明删除了braumeister.org网站。遵循相同的原则,braumeister只是提供了一种初学者友好的方式来浏览公式版本。
到目前为止,其他大多数答案都已过时。不幸的是,Homebrew仍然没有内置的方法来安装过时的版本,除非该版本作为单独的公式存在(例如python@2
,postgresql@9.4
…)。
幸运的是,对于其他公式,有一种比过去必不可少的混乱麻烦的方法。以下是完整的说明:
在日志中搜索正确的版本:
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:
brew info ‹formula› | grep ^From:
修正网址:
github.com
为raw.githubusercontent.com
blob/master
为我们在第一步中找到的提交哈希。master
通过使用提交哈希替换先前找到的URL,安装所需的版本,例如:
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或任何其他公式。
brew log
,所以任何额外的-F
或--grep
选项中没有适合我。
brew log
。现在我不必费心编写一个新版本,因为这需要正确地解析git日志消息,或者git log
直接在相应的存储库上运行。而且更改日志似乎甚至都没有提到这一重大更改。除了烦人。
External Command
可能需要在结构中brew
进行操作才能获得这种类型的git log
过滤。docs.brew.sh/External-Commands
brew extract
用法的地方,谢谢!
因为简单brew install maven
安装了Maven 3.0.3,所以我只是使用Homebrew返回Maven 2.2.1 。
首先,您必须将Maven目录留在那里
$ brew取消链接Maven
使用酿造水龙头命令
$ brew tap自制/版本 克隆到'/ usr / local / Library / Taps / homebrew-versions'... 远程:计数对象:590,已完成。 远程:压缩对象:100%(265/265),已完成。 远程:总计590(增量362),已重用549(增量325) 接收物体:100%(590/590),117.49 KiB | 已完成79 KiB / s。 解析增量:100%(362/362),已完成。 窃听50式
现在,您可以安装maven2公式:
$ brew install maven2 ==>下载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个文件,3.1M,6秒内建立
$ mvn-版本 Apache Maven 2.2.1(r801777; 2009-08-06 12:16:01-0700) Java版本:1.6.0_37 Java主页:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 默认语言环境:en_US,平台编码:MacRoman 操作系统名称:“ mac os x”版本:“ 10.7.4”拱门:“ x86_64”家族:“ mac”
编辑:
您也可以只brew switch maven 2.2.1
切换到其他版本。
编辑: Apache Maven项目重组了他们的仓库。更新了此答案以说明此更改。
基于@tschundeee和@Debilski的更新1所述的工作流程,我使该过程自动化并在此脚本中添加了清理功能。
下载它,放在你的路径和brewv <formula_name> <wanted_version>
。对于特定的OP,将为:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
自那以来的最新答案增加了@ lance-pollard已作为工作答案发布的内容。
如何安装特定版本的公式(此示例中使用的公式是terraform
):
git log master -- Formula/terraform.rb
本地克隆存储库,从github的历史记录获取提交版本。brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
不幸的是,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或将其设置为默认外壳程序。
在最新版本的自制软件(在撰写本文时为0.9.5)上,将针对您要安装的自制啤酒桶的版本提供特定的配方。例:
$ brew search mongodb
mongodb mongodb24 mongodb26
然后像平常一样做brew install mongodb26
。
如果您已经安装了最新版本,请确保取消链接最新版本并链接所需的版本:brew unlink mongodb && brew link mongodb26
。
我的情况:postgresql
意外从11升级到12。我想保留11。
brew services stop postgresql
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)。
brew postgresql-upgrade-database
)。对于几乎所有其他公式,此答案都没有用。
brew postgresql-upgrade-database
是,对于升级。我的答案是关于使用较旧的 Postgres版本。仅仅切换二进制文件是行不通的。
nvm
FYI)的NodeJS用户我很幸运在较早的LTS版本中使用此技术。至少在撰写本文时,v10和v12应该可用,例如brew install node@12
Formulae.brew.sh/formula/node
问题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
。这告诉我,在我的计算机上,homebrew安装在,/usr/local
并且我的Formula
目录默认位于/usr/local/Library/Formula
找到您的程序包的特定公式文件(.rb)。
由于我想降级docker-machine
,因此可以看到一个docker-machine.rb
文件。
获取此公式文件的版本历史记录。输入git log docker-machine.rb
。这将列出该文件的完整提交历史记录。您将看到如下输出:
...更多 提交20c7abc13d2edd67c8c1d30c407bd5e31229cacc 作者:BrewTestBot 日期:2015年11月5日星期四16:14:18 +0000 docker-machine:更新0.5.0瓶子。 提交8f615708184884e501bf5c16482c95eff6aea637 作者:Vincent Lesierse 日期:2015年10月27日星期二22:25:30 +0100 码头工人机器0.5.0 将docker-machine更新为0.5.0 关闭#45403。 签字人:多米尼克·蒂勒 提交5970e1af9b13dcbeffd281ae57c9ab90316ba423 作者:BrewTestBot 日期:2015年9月21日星期一14:04:04 +0100 docker-machine:更新0.4.1瓶子 提交18fcbd36d22fa0c19406d699308fafb44e4c8dcd 作者:BrewTestBot 日期:2015年8月16日星期日09:05:56 +0100 docker-machine:更新0.4.1瓶子 ...更多
棘手的部分是找到所需特定版本的最新提交。在上面的代码中,我可以知道最新的0.4.1版本是使用以下commit标记提交的:commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
。高于此点的提交从版本0.5.0开始(git日志条目从最新到最早的日期列出)。
获取公式文件的早期版本。 使用第3步中的提交标记(可以使用前6个字符),您可以使用以下命令获取较旧版本的公式文件:
git checkout 5970e1 docker-machine.rb
卸载当前的软件包版本。
只需运行常规brew命令即可卸载软件包的当前版本。
例如brew uninstall docker-machine
安装较旧的软件包版本
现在,您只需运行常规的brew install命令,它将安装您已签出的公式。例如brew install docker-machine
brew link docker-machine
如有必要,您可能需要重新链接。
如果您希望在任何时候恢复到特定程序包的最新版本,请进入“公式”目录,并在公式文件(.rb)上发出以下命令
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
然后,您可以brew uninstall docker-machine
并brew install docker-machine
获得最新版本,并继续保持最新状态。
git log --grep 0.4.1 docker-machine.rb
。
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
这种方式找到足够的版本历史记录。由于某种原因,@ sealocal的答案显示了更多。
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
要么
git clone git@github.com:Homebrew/homebrew-core.git
git log master -- Formula/flyway.rb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Formula/flyway.rb
brew install Formula/flyway.rb
从homebrew-core
目录运行?它对我raw.github..
对于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)
这些都不适合我的情况(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
HOMEBREW_NO_AUTO_UPDATE
并阅读github.com/Homebrew/brew/issues/1188
cd
brew --prefix /Homebrew
和git log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
被忽略了。
HOMEBREW_NO_AUTO_UPDATE
。是的,在发现需要的东西之前,不要忘记您需要的东西。xD
HOMEBREW_NO_INSTALL_CLEANUP
这不是您需要记住的东西吗?
如果您使用找不到版本brew search <formula>
,也可以尝试遍历公式的提交日志以找到所需的版本:
这是通过brew安装较旧版本的nginx的示例:
看到 nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
从那里,我们可以安装1.6.3
sha和原始git url:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
当前,不赞成使用旧的安装特定公式版本的方法。因此,似乎我们必须使用brew edit [formula]
。例如,说我们要安装的62.1
版本icu4c
(例如需要postgresql 10.5
)。那你就得
> brew edit icu4c
# drops you to editor
在这里,你将不得不改变url
,version
和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
以最终下载该62.1
版本。
sha256
?就我而言https://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
将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
希望有帮助:)
我只是将旧版本的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
而已。也许对任何人都有用。
对于当前不在默认冲泡公式中的版本,您可以使用来自https://github.com/buildtools-version-taps/homebrew-versions-tap-tool的工具轻松创建自己的水龙头
brew tap-new user/repo
然后brew extract --version='Major.minor' FORMULA user/repo
再brew install FORMULA@Major.minor
。
要查找pkg
具有version 的软件包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
复制并运行给定的命令进行安装。
postgresql
之所以很奇怪,是因为它在某一时刻在Homebrew中有不同的版本,bash
可能是一个更好的示例,因为它在同一公式名称中从4.x变为5.x。参见stackoverflow.com/a/55764594/3794873