Gra*_*vis 2072 versioning installation homebrew
如何在自制软件中安装特定版本的公式?例如,postgresql-8.4.4而不是最新的9.0.
Deb*_*ski 2422
(我已经重新编辑了我的答案,为安装/使用旧版本的自制软件提供了更全面的工作流程.如果您发现旧版本更好,请随意添加备注.)
让我们从最简单的情况开始:
当自制软件安装新的公式时,它会将它放在一个版本化的目录中brew install postgresql@8.4.4.然后,仅全局安装指向此文件夹的符号链接.原则上,这使得在两个已安装的版本之间切换非常容易.(*)
如果你已经使用自制软件更长时间并且从未删除旧版本(例如使用/usr/local/Cellar/postgresql/9.3.1),那么你的程序的某些旧版本可能仍然存在.如果您只想激活之前的版本,brew cleanup最简单的方法就是这样做.
检查brew switch(或brew info postgresql)是否安装了旧版本:
$ 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
Run Code Online (Sandbox Code Playgroud)
我们看到已经安装了一些旧版本.我们可以使用brew switch postgresql <TAB>以下方法激活
$ 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
Run Code Online (Sandbox Code Playgroud)
让我们仔细检查激活的内容:
$ 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
Run Code Online (Sandbox Code Playgroud)
请注意,星星brew switch已移至新激活的版本
(*)请注意,*只有旧版本的所有依赖项仍然存在时才有效.在某些情况下,可能需要重建旧版本.因此,brew switch当人们想要在不太远的两个版本之间切换时,使用最有用.
特别是对于较大的软件项目,很可能对某个软件的几个(可能是API不兼容的)主要版本有足够高的需求.截至2012年3月,Homebrew 0.9为此提供了一种机制:brew switch&自制软件版本存储库.
该版本存储库可能包含多个公式的旧版本的后端.(大多数只是大而着名的,但当然他们也会有几个postgresql公式.)
brew tap 会告诉你在哪里看:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Run Code Online (Sandbox Code Playgroud)
我们可以通过输入简单地安装它
$ 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
# …
Run Code Online (Sandbox Code Playgroud)
请注意,这已自动点按了brew search postgresql水龙头.(检查homebrew/versions,删除brew tap.)以下内容相同:
$ brew tap homebrew/versions
$ brew install postgresql8
Run Code Online (Sandbox Code Playgroud)
只要向后移植的版本公式保持最新,这种方法可能是处理旧软件的最佳方法.
列出了以下方法,主要是为了完整性.两者都试图从brew存储库中复活一些不死的公式.由于更改了依赖关系,公式规范中的API更改或仅仅更改了下载URL,因此可能会或可能不会起作用.
由于整个公式目录是一个git存储库,因此可以使用plain git命令安装特定版本.但是,我们需要找到一种方法来获取旧版本可用的提交.
a)历史时期
在2011年8月到2014年10月期间,自制软件有一个brew untap homebrew/versions命令,它可以使用各自的SHA哈希值吐出所有可用的版本.截至2014年10月,您必须brew versions先使用它才能使用它.正如水龙头的名称所示,你应该只做这个作为最后的手段.
例如
$ 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
Run Code Online (Sandbox Code Playgroud)
如您所见,它建议不要使用它.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
Run Code Online (Sandbox Code Playgroud)
现在安装了较旧的postgresql版本,我们可以重新安装最新的公式,以保持我们的存储库清洁:
$ git checkout -- Library/Formula/postgresql.rb
Run Code Online (Sandbox Code Playgroud)
brew tap homebrew/boneyard 是你的朋友在旧的和新的之间改变.
b)史前时代
对于特殊需求,我们也可以尝试自己挖掘自制回购.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
Run Code Online (Sandbox Code Playgroud)
brew switch查找git log -S在文件中添加或删除字符串的所有提交'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
Run Code Online (Sandbox Code Playgroud)
显然,Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb是我们感兴趣的提交.由于这个提交很旧,我们将尝试降级完整的自制软件安装(这样,公式API或多或少保证有效):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Run Code Online (Sandbox Code Playgroud)
您可以跳过最后一个命令以将引用保留在git存储库中.
一个注意事项:在签出旧提交时,您暂时降级自制程序安装.因此,您应该小心,因为自制程序中的某些命令可能与最新版本不同.
这不是太难,您可以将其上传到您自己的存储库.曾经是Homebrew-Versions,但现在已停止使用.
如果你想保留某个版本,比如postgresql,并在你做自然fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422程序时阻止它被更新,你可以固定一个公式:
$ brew pin postgresql
Run Code Online (Sandbox Code Playgroud)
固定公式列在其中brew update; brew upgrade,一旦您想要引入最新的更改和更新,您可以再次取消固定:
$ brew unpin postgresql
Run Code Online (Sandbox Code Playgroud)
Bij*_*jan 749
现在Homebrew/versions已被弃用,Homebrew/core支持具有新命名格式的多个公式版本.
要安装特定版本,例如postgresql 9.5,您只需运行:
$ brew install postgresql@9.5
Run Code Online (Sandbox Code Playgroud)
要列出可用版本,请使用@进行搜索:
$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ? postgresql@9.4 postgresql@9.5 postgresql@9.6
Run Code Online (Sandbox Code Playgroud)
Tre*_*ham 450
现在有一种更简单的方法来安装您之前安装的旧版本的公式.简单地使用
brew switch [formula] [version]
Run Code Online (Sandbox Code Playgroud)
例如,我在Node.js 0.4.12和0.6.5之间定期交替:
brew switch node 0.4.12
brew switch node 0.6.5
Run Code Online (Sandbox Code Playgroud)
由于brew switch只是更改符号链接,因此速度非常快.请参阅外部命令下的Homebrew Wiki上的更多文档.
Vis*_*hal 240
更新:2015年1月15日

brew install <url>(可能必须brew unlink先,例如brew unlink docker)brew switch docker 1.3.3brew 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
Run Code Online (Sandbox Code Playgroud)
hal*_*ube 106
我发现了一种比其他复杂解决方案更好的替代解决方案.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Run Code Online (Sandbox Code Playgroud)
这将下载并安装PostgreSQL 8.4.8
我找到了这个解决方案,开始按照搜索回购的步骤和回购中的注释.
经过一番研究发现,有人收集了一批稀有的配方奶粉.
如果您正在寻找MySQL 5.1.x,请尝试一下.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
Run Code Online (Sandbox Code Playgroud)
Lan*_*ard 104
按照@ halfcube的建议,这非常有效:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rbsea*_*cal 75
您可以使用在公式历史记录中标识公式和特定提交的策略,该策略与您要安装的软件包的版本相匹配.
按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 以标识您的公式和该公式的特定版本(由下面的URL中的commmit SHA标识).
安装它 $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
Run Code Online (Sandbox Code Playgroud)注意:此答案已更新,以说明删除braumeister.org网站的原因.同样的原则适用,braumeister只是提供了一种初学者友好的方式来导航公式版本.
Cam*_*ale 29
自从简单brew install maven安装Maven 3.0.3 以来,我刚用Homebrew回到Maven 2.2.1 .
首先,你必须离开maven目录
$ 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项目重新组织了他们的回购.更新了此答案以解释此更改.
Max*_*ysh 26
我的情况:
postgresql意外地从 11 升级到 12(brew upgrade无参数运行后)解决方案:
brew services stop postgresql
Run Code Online (Sandbox Code Playgroud)
brew install postgresql@11
Run Code Online (Sandbox Code Playgroud)
brew link postgresql@11 --force
Run Code Online (Sandbox Code Playgroud)
postgres为postgres@11:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
Run Code Online (Sandbox Code Playgroud)
brew services start postgresql@11
Run Code Online (Sandbox Code Playgroud)
如果有任何错误,请检查/usr/local/var/log/postgresql@11.log(注意@11)。
Kon*_*lph 22
大多数其他答案现在已经过时了.不幸的是,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›
Run Code Online (Sandbox Code Playgroud)
这将显示提交哈希列表.选一个合适的(大多数应该是非常明显的,通常是最新的(即顶部的).
找到公式驻留在上游存储库中的URL:
brew info ‹formula› | grep ^From:
Run Code Online (Sandbox Code Playgroud)修复网址:
github.com为raw.githubusercontent.comblob/master为我们在第一步中找到的提交哈希.master通过提交哈希替换先前找到的URL来安装所需的版本,例如:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
Run Code Online (Sandbox Code Playgroud)(最后一步可能需要在brew unlink ‹formula›之前运行.)
Mat*_*iSG 21
基于@tschundeee和@ Debilski的更新1描述的工作流程,我自动化了该过程并在此脚本中添加了清理.
下载它,把它放在你的路径和brewv <formula_name> <wanted_version>.对于特定的OP,它将是:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
Run Code Online (Sandbox Code Playgroud)
:)
jid*_*ula 21
其他答案都没有充分涵盖 2022 年的这一点,因此我添加了这些说明,这些说明改编自 Homebrew 维护者对安装特定 Cask 版本的类似问题的答案:https: //stackoverflow.com/a/62765875/6310633
卸载您的公式
brew uninstall <formula>
Run Code Online (Sandbox Code Playgroud)
切换到您的存储库克隆homebrew-core并重置为包含您想要的版本的提交。
cd "$(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula"
git log <formula>.rb # examine recent commits for <formula>
git reset --hard <commit-sha> # reset clone to last known-good commit for <formula>
Run Code Online (Sandbox Code Playgroud)
为您的版本签出一个新分支,这样brew就不会在每个命令后自动刷新master,安装您的公式并固定它。
git checkout -b <formula>-downgrade-<version>
brew install <formula>
brew pin <formula>
Run Code Online (Sandbox Code Playgroud)
清理
git checkout master
brew update
Run Code Online (Sandbox Code Playgroud)
当您准备好升级您的配方时,您可以brew unpin <formula>像往常一样升级。
小智 19
解决方案
brew extract --version=8.4p1 openssh homebrew/cask
brew install openssh@8.4p1
Run Code Online (Sandbox Code Playgroud)
最新的openssl@8.5p1运行后有bug brew upgrade,通过上述方式成功回退到上一版本。
Mig*_*yes 16
更新后的答案增加了@ lance-pollard已经发布的工作答案.
如何安装特定版本的公式(此示例中使用的公式是terraform):
git log master -- Formula/terraform.rb,如果你在本地克隆回购.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rbilo*_*aly 14
这里的其他答案都很好,但是如果您需要安装旧版本的软件包并确保修改软件包名称,则需要采用不同的方法。这在使用脚本(在我的例子中是 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
Run Code Online (Sandbox Code Playgroud)
Ale*_*arp 12
在最新版本的自制软件(编写本文时为0.9.5)中,将为您要安装的自制软件桶版本提供特定的配方.例:
$ brew search mongodb
mongodb mongodb24 mongodb26
Run Code Online (Sandbox Code Playgroud)
然后brew install mongodb26就像正常一样.
如果您已经安装了最新版本,请确保取消链接最新版本并链接所需版本:brew unlink mongodb && brew link mongodb26.
the*_*ine 11
Homebrew 最近改变了。曾经有效的东西不再有效。我发现最简单的工作方式(2021 年 1 月)是:
.rb我的软件的文件(首先转到Formulas,找到我需要的那个,然后单击“History”;对于 CMake,这是在https://github.com/Homebrew/homebrew-core/commits/master/Formula/ cmake.rb )
brew unlink cmakebrew 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现在可以删除下载的文件。
问题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/local我的Formula目录位于/usr/local/Library/Formula
找到包的特定公式文件(.rb).
由于我想降级docker-machine,我可以看到一个docker-machine.rb文件.
获取此公式文件的版本历史记录.输入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 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
Run Code Online (Sandbox Code Playgroud)
然后你就可以brew uninstall docker-machine和brew install docker-machine获得最新版本,并保持这种前进.
不幸的是,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.
Run Code Online (Sandbox Code Playgroud)
这将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 bashbrew unlink bashbrew 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
Run Code Online (Sandbox Code Playgroud)
当确定公式中存在版本时,可以使用以下内容:
# 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}')
Run Code Online (Sandbox Code Playgroud)
导出要使用的提交哈希后,可以使用它来安装该版本的软件包。
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
Run Code Online (Sandbox Code Playgroud)
按照公式输出中的说明将其放入您的PATH或将其设置为默认外壳程序。
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
我在这里尝试了大多数解决方案,但它们已经过时了。我不得不将这里的一些想法与自己的工作结合起来。结果,我创建了一个脚本来帮助我完成繁重的工作,您可以在此处找到
用法:
brewv.sh formula_name desired_version
Run Code Online (Sandbox Code Playgroud)
最后一个版本的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)
Run Code Online (Sandbox Code Playgroud)
如果找不到您的版本brew search <formula>,您还可以尝试查看公式的提交日志以查找所需的版本:
这是通过brew安装旧版nginx的示例:
看到 nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
从那里,我们可以安装1.6.3sha和raw git url:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
小智 6
这些都不适合我的情况(Python),所以我将加上我的2美分:
cd `brew --prefix`
git log Library/Formula/python.rb
Run Code Online (Sandbox Code Playgroud)
输出如下:
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
最后,清理:
git checkout master
Run Code Online (Sandbox Code Playgroud)
目前,安装特定公式版本的旧方法已被弃用。所以看起来我们必须使用brew edit [formula]. 例如说我们要安装(例如需要)的62.1版本。那你就得icu4cpostgresql 10.5
> brew edit icu4c
# drops you to editor
Run Code Online (Sandbox Code Playgroud)
在这里,您必须将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"
Run Code Online (Sandbox Code Playgroud)
然后运行brew reinstall icu4c以最终下载62.1版本。
在这里,我对此的简单回答 - 真的很恼火,因为没有内置的解决方案,所以我构建了自己的懒惰“脚本”。请随意贡献
# 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
Run Code Online (Sandbox Code Playgroud)
https://gist.github.com/ArgonQQ/cff4834dab6b254cc2140bb1454b47ef
| 归档时间: |
|
| 查看次数: |
1045305 次 |
| 最近记录: |