Homebrew安装特定版本的公式?
如何在自制程序中安装特定版本的公式?例如,postgresql-8.4.4 而不是最新的 9.0。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何在自制程序中安装特定版本的公式?例如,postgresql-8.4.4 而不是最新的 9.0。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(30)
我创建了一个工具来简化这个答案。
要查找版本为
abc
的包pkg
,请运行:这将列出
pkg
自制程序公式中提及给定版本及其 GitHub 的提交网址。验证来自给定 URL 的提交,并输入所选提交的索引。
复制并运行给定的命令进行安装。
I created a tool to ease the process prescribed in this answer.
To find a package
pkg
with versiona.b.c
, run:This will list commits on the
pkg
homebrew formula that mention the given version along with their GitHub urls.Verify the commit from the given URL, and enter the index of the selected commit.
Copy and run the given command to install.
将 Library/Formula/postgresql.rb 第 8 行更新为
第 9 行的 MD5 以
保存并退出。
现在,在此阶段,您可能会遇到
postgresql 无法创建共享内存段
错误,要解决此问题,请像这样更新/etc/sysctl.conf
:尝试
再次 initdb /usr/local/var/postgres
,它应该运行顺利。在启动时运行 postgresql
希望有帮助:)
Update on the Library/Formula/postgresql.rb line 8 to
And MD5 on line 9 to
Save and exit.
Now in this stage you might face the
postgresql could not create shared memory segment
error, to work around that update the/etc/sysctl.conf
like this:Try
initdb /usr/local/var/postgres
again, and it should run smooth.To run postgresql on start
Hope that helps :)
TLDR:
brew install [电子邮件受保护]
有关更多详细信息,请参阅下面的答案。*(我重新编辑了我的答案,为安装/使用自制软件的旧版本提供了更彻底的工作流程。如果您发现旧版本更好,请随时添加注释。)
让我们开始最简单的情况:
1)检查版本是否已安装(但未激活)
当 homebrew 安装新公式时,它将其放入版本化目录中,例如
/usr/local/Cellar/postgresql/9.3.1
。然后仅全局安装到该文件夹的符号链接。原则上,这使得在两个已安装版本之间切换变得非常容易。 (*)如果您使用自制程序的时间较长且从未删除过旧版本(例如使用
brew cleanup
),则您的程序的某些旧版本可能仍然存在。如果您只想激活以前的版本,brew switch
是最简单的方法。使用
brew info postgresql
(或brew switch postgresql
)检查是否安装了旧版本:我们看到已经安装了一些旧版本。我们可以使用
brew switch
激活它:让我们仔细检查激活的内容:
请注意,星号
*
已移至新激活的版本(*)请注意仅当旧版本的所有依赖项仍然存在时,
brew switch
才有效。在某些情况下,可能需要重建旧版本。因此,当您想要在相距不太远的两个版本之间进行切换时,使用brew switch
最为有用。2) 检查该版本是否可作为水龙头使用,
特别是对于较大的软件项目,很可能对某个软件的多个(可能是 API 不兼容的)主要版本有足够高的需求。截至 2012 年 3 月,Homebrew 0.9 为此提供了一种机制:
brew点击
& 自制版本存储库。该版本存储库可能包括多个公式的旧版本的向后移植。 (大多数只有大的和著名的,但当然他们也会有几个 postgresql 的公式。)
brew search postgresql
将告诉你在哪里寻找:我们可以简单地通过输入来安装它
请注意,这已自动点击
homebrew/versions
点击。 (使用brew tap
检查,使用brew untap homebrew/versions
删除。)以下内容是等效的:只要向后移植的版本公式保持最新,这种方法可能是处理旧软件的最佳方法。
3)尝试一些过去的公式
列出以下方法主要是为了完整性。两者都试图从酿造存储库中复活一些不死配方。由于依赖关系发生变化、公式规范中的 API 发生变化或者只是下载 URL 发生变化,事情可能会正常工作,也可能无法正常工作。
由于整个公式目录是一个 git 存储库,因此可以使用普通 git 命令安装特定版本。但是,我们需要找到一种方法来提交旧版本可用的地方。
a) 历史时期
在2011 年 8 月到 2014 年 10 月之间,自制程序有一个
brew versions
命令,该命令会输出所有可用版本及其各自的 SHA 哈希值。自 2014 年 10 月起,您必须执行brew tap homebrew/boneyard
才能使用它。正如水龙头的名称所示,您可能只应将其作为最后的手段。例如,
正如您所看到的,它建议不要使用它。 Homebrew 会通过其内部启发式吐出它可以找到的所有版本,并向您展示一种检索旧公式的方法。我们来试试吧。
现在已经安装了较旧的 postgresql 版本,我们可以重新安装最新的公式以保持存储库清洁:
brew switch
是您在新旧之间进行更改的朋友。b) 史前时代
对于特殊需求,我们也可以尝试自己挖掘自制软件仓库。
git log -S
查找在文件Library/Taps/homebrew/homebrew- 中添加或删除字符串
。结果我们得到了两次提交。'8.4.4'
的所有提交core/Formula/postgresql.rb显然,fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 是我们感兴趣的提交。由于此提交相当旧,我们将尝试降级完整的自制软件安装(这样,公式 API 或多或少可以保证valid):
您可以跳过最后一个命令以将引用保留在 git 存储库中。
需要注意的是:在检查较旧的提交时,您会暂时降级您的自制软件安装。因此,您应该小心,因为自制程序中的某些命令可能与最新版本不同。
4)手动编写公式
不太难并且然后您可以将其上传到您自己的存储库。曾经是 Homebrew-Versions,但现在已停止使用。
A.) 奖励:固定
如果您想保留某个版本(例如 postgresql),并在进行自然的
brew 更新时阻止其更新;在brew升级
过程中,您可以固定一个公式:固定公式列在
/usr/local/Library/PinnedKegs/
中,一旦您想要引入最新的更改和更新,您可以再次取消固定:TLDR:
brew install [email protected]
See answer below for more details.*(I’ve re-edited my answer to give a more thorough workflow for installing/using older software versions with homebrew. Feel free to add a note if you found the old version better.)
Let’s start with the simplest case:
1) Check, whether the version is already installed (but not activated)
When homebrew installs a new formula, it puts it in a versioned directory like
/usr/local/Cellar/postgresql/9.3.1
. Only symbolic links to this folder are then installed globally. In principle, this makes it pretty easy to switch between two installed versions. (*)If you have been using homebrew for longer and never removed older versions (using, for example
brew cleanup
), chances are that some older version of your program may still be around. If you want to simply activate that previous version,brew switch
is the easiest way to do this.Check with
brew info postgresql
(orbrew switch postgresql <TAB>
) whether the older version is installed:We see that some older version is already installed. We may activate it using
brew switch
:Let’s double-check what is activated:
Note that the star
*
has moved to the newly activated version(*) Please note that
brew switch
only works as long as all dependencies of the older version are still around. In some cases, a rebuild of the older version may become necessary. Therefore, usingbrew switch
is mostly useful when one wants to switch between two versions not too far apart.2) Check, whether the version is available as a tap
Especially for larger software projects, it is very probably that there is a high enough demand for several (potentially API incompatible) major versions of a certain piece of software. As of March 2012, Homebrew 0.9 provides a mechanism for this:
brew tap
& the homebrew versions repository.That versions repository may include backports of older versions for several formulae. (Mostly only the large and famous ones, but of course they’ll also have several formulae for postgresql.)
brew search postgresql
will show you where to look:We can simply install it by typing
Note that this has automatically tapped the
homebrew/versions
tap. (Check withbrew tap
, remove withbrew untap homebrew/versions
.) The following would have been equivalent:As long as the backported version formulae stay up-to-date, this approach is probably the best way to deal with older software.
3) Try some formula from the past
The following approaches are listed mostly for completeness. Both try to resurrect some undead formula from the brew repository. Due to changed dependencies, API changes in the formula spec or simply a change in the download URL, things may or may not work.
Since the whole formula directory is a git repository, one can install specific versions using plain git commands. However, we need to find a way to get to a commit where the old version was available.
a) historic times
Between August 2011 and October 2014, homebrew had a
brew versions
command, which spat out all available versions with their respective SHA hashes. As of October 2014, you have to do abrew tap homebrew/boneyard
before you can use it. As the name of the tap suggests, you should probably only do this as a last resort.E.g.
As you can see, it advises against using it. Homebrew spits out all versions it can find with its internal heuristic and shows you a way to retrieve the old formulae. Let’s try it.
Now that the older postgresql version is installed, we can re-install the latest formula in order to keep our repository clean:
brew switch
is your friend to change between the old and the new.b) prehistoric times
For special needs, we may also try our own digging through the homebrew repo.
git log -S
looks for all commits in which the string'8.4.4'
was either added or removed in the fileLibrary/Taps/homebrew/homebrew-core/Formula/postgresql.rb
. We get two commits as a result.Obviously,
fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
is the commit we’re interested in. As this commit is pretty old, we’ll try to downgrade the complete homebrew installation (that way, the formula API is more or less guaranteed to be valid):You may skip the last command to keep the reference in your git repository.
One note: When checking out the older commit, you temporarily downgrade your homebrew installation. So, you should be careful as some commands in homebrew might be different to the most recent version.
4) Manually write a formula
It’s not too hard and you may then upload it to your own repository. Used to be Homebrew-Versions, but that is now discontinued.
A.) Bonus: Pinning
If you want to keep a certain version of, say postgresql, around and stop it from being updated when you do the natural
brew update; brew upgrade
procedure, you can pin a formula:Pinned formulae are listed in
/usr/local/Library/PinnedKegs/
and once you want to bring in the latest changes and updates, you can unpin it again:简单的工作流程
现在 Homebrew/versions 已被弃用,Homebrew/core 支持具有新命名格式的几个版本的公式。
要安装特定版本,例如 postgresql 9.5,您只需运行:
要列出可用版本,请使用 @ 进行搜索:
Simple Workflow
Now that Homebrew/versions has been deprecated, Homebrew/core supports a few versions of formulae with a new naming format.
To install a specific version, e.g. postgresql 9.5 you simply run:
To list the available versions run a search with @:
⚠ 这个答案在 2020 年 12 月之后将不再有效:
brew switch
在 HomeBrew 2.7.0 中被禁用 (在 2.6.0 中已弃用)对于 2.7 之前的 Homebrew 版本:
现在有一种更简单的安装方法您之前安装的旧版本公式。只需使用
例如,我定期在 Node.js 0.4.12 和 0.6.5 之间交替:
由于
brew switch
只是更改符号链接,因此速度非常快。请参阅 Homebrew Wiki 上 外部命令 下的更多文档。⚠ This answer won't work anymore after December 2020:
brew switch
got disabled in HomeBrew 2.7.0 (deprecated in 2.6.0)For versions of Homebrew before 2.7:
There's now a much easier way to install an older version of a formula that you'd previously installed. Simply use
For instance, I alternate regularly between Node.js 0.4.12 and 0.6.5:
Since
brew switch
just changes the symlinks, it's very fast. See further documentation on the Homebrew Wiki under External Commands.更新:1/15/2015
https://github.com/Homebrew/homebrew-core/commits /master/Formula/docker.rb
brew install
(可能必须 <首先 code>brew unlink,例如brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4。 1
来自此要点
Update: 1/15/2015
https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
brew install <url>
(may have tobrew unlink
first, e.g.brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
From this gist
按照@halfcube的建议,这非常有效:
https://github.com/Homebrew/homebrew-core/tree/master/Formula
.rb 文件复制到任意文件夹(在本例中:
postgresql.rb
)brew install postgresql.rb
Along the lines of @halfcube's suggestion, this works really well:
https://github.com/Homebrew/homebrew-core/tree/master/Formula
.rb
file to any folder (in this case:postgresql.rb
)brew install postgresql.rb
解决方案
最新的
[电子邮件受保护]
运行brew升级
后出现bug,所以我通过上述方式成功回退到之前的版本。Solution
The newest
[email protected]
has bugs after I runbrew upgrade
, so I backed to the previous version successfully via the above way.我发现了一个比其他复杂解决方案更好的替代解决方案。
这将下载并安装 PostgreSQL 8.4.8
我通过开始按照搜索存储库和
经过一番研究,发现有人有一套稀有配方可供酿造。
如果您正在寻找 MySQL 5.1.x,请尝试一下。
I've discovered a better alternative solution then the other complex solutions.
This will download and install PostgreSQL 8.4.8
I found this solution by starting to follow the steps of searching the repo and a comment in the repo .
After a little research found that someone has a collection of rare formulars to brew up with.
If your looking for MySQL 5.1.x, give this a try.
更新:此方法已被弃用并且不再有效。
此方法会导致错误:不支持从 GitHub 提交 URL 安装 mysql!
brew extract mysql
改为 GitHub 上的稳定版本。 (UsageError)我尝试使用推荐的命令进行安装,但它在 MySQL 5.7.10 的这个特定实例中不起作用。如果您使用更新的配方,您的运气可能会更好。
您可以修改上面路径中的公式(用 ruby 编写)以尝试达到您想要的结果(例如,在最新的 macOS 版本上安装 MySQL 5.7.10)。
您可以使用识别公式以及公式历史记录中与您要安装的软件包版本相匹配的特定提交的策略。
转到https://github.com/Homebrew/homebrew-core
按
t
在键盘上激活文件查找器。确定一个看起来最相关的公式,也许是:
Formula/mysql.rb
,将您带到论坛文件位置:https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb。单击
历史记录
按钮查看修订历史记录,该按钮位于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。
应用提交后,单击“查看”按钮查看 mysql.rb 文件的源代码。
然后单击“原始”按钮查看原始源。
复制网址。或者,您可以使用
mysql.rb
文件名自行构建 URL,以标识您的公式以及该公式的特定版本(由下面 URL 中的 Commit SHA 标识)。https://raw.githubusercontent.com/Homebrew/homebrew-core /c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
使用
$brew install [步骤 7 中的 URL]
安装它
UPDATE: This method is deprecated and no longer works.
This method results in error: Installation of mysql from a GitHub commit URL is unsupported!
brew extract mysql
to a stable tap on GitHub instead. (UsageError)I tried to install with the recommended command, but it doesn't work in this particular instance of MySQL 5.7.10. You may have better luck with a more recent Formula.
You could modify the Formula at the path above (written in ruby) to attempt to achieve your desired result (e.g., an installation of MySQL 5.7.10 on a recent macOS version).
You can use the strategy of identifying the formula and a particular commit in the history of the formula that matches the version of the package you'd like to install.
Go to https://github.com/Homebrew/homebrew-core
Press
t
on your keyboard to activate the file finder.Identify a formula that looks most relevant, perhaps:
Formula/mysql.rb
, bringing you to a forumla file location: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb.Look at the revision history by clicking on the
History
button, which is located at https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb. If you're interested in MySQL 5.7.10, you might want to click the latest revision prior to 5.7.11, which navigates to a GitHub commit:https://github.com/Homebrew/homebrew-core/commit/c77882756a832ac1d87e7396c114158e5619016c#Formula/mysql.rb
NOTE: You may have to view the commit history in your console per GitHub's suggestion if the commit history does not load in your browser. Replace the commit SHA above in the URL if you're interested in seeing that commit on GitHub. Alternatively, skip to step 7, below.
Click the "View" button to view the source for the mysql.rb file after the commit was applied.
Then click the "Raw" button to view the raw source.
Copy the URL. Alternatively, build the URL yourself with the
mysql.rb
file name to identify your formula and the particular version of that formula (identified by the commmit SHA in the URL below).https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
Install it with
$ brew install [URL from step 7]
大多数其他答案现在已经过时了。不幸的是,Homebrew 仍然没有安装过时版本的内置方法,除非该版本作为单独的公式存在(例如
python@2
、[电子邮件受保护]
...)。幸运的是,对于其他公式来说,有一种比过去必要的复杂混乱更简单的方法。以下是完整说明:
在日志中搜索正确的版本:
这将显示提交哈希列表。选择一个合适的版本(大多数情况下它应该非常明显,并且通常是最新的(即顶部)版本。
在上游存储库中查找公式所在的 URL:
修复 URL:
github.com
替换为raw.githubusercontent.com
blob/master
替换为我们在第一步中找到的提交哈希。通过用提交哈希替换先前找到的 URL 中的
master
来安装所需的版本,例如:最后一步可能需要运行
brew unlink< /code> 之前。)
如果您复制了要使用的提交哈希,您可以使用类似此示例的内容来安装该版本,将值和
bash
替换为您的提交哈希和所需的公式。此示例安装的是 bash 4.4.23 而不是 bash 5,但如果您随后执行了
brew 升级
,则 bash 5 将安装在顶部,除非您首先执行brew pin bash
>。为了使这个过程更顺畅而不需要固定,您应该首先使用brew install bash
安装最新版本,然后使用brew unlink bash
安装,然后根据上面的脚本安装您想要的旧版本,然后使用brew switch bash 4.4.23
设置旧版本的符号链接。现在,brew 升级
不应影响您的 Bash 版本。您可以brew switch bash
获取可切换到的版本列表。使用仅限本地的自定义 Tap 的替代方案
实现相同目标的另一种方法似乎是:
这会在您的自定义 Tap 中创建一个
formula@version
,您可以根据上面的示例进行安装。缺点是您可能仍然需要brew unlink bash
然后brew link [电子邮件受保护]
以便使用您的特定版本的 Bash 或任何其他公式。Most of the other answers are obsolete by now. Unfortunately Homebrew still doesn’t have a builtin way of installing an outdated version, unless that version exists as a separate formula (e.g.
python@2
,[email protected]
…).Luckily, for other formulas there’s a much easier way than the convoluted mess that used to be necessary. Here are the full instructions:
Search for the correct version in the logs:
This will show a list of commit hashes. Take one that is appropriate (mostly it should be pretty obvious, and usually is the most recent (i.e. top) one.
Find the URL at which the formula resides in the upstream repository:
Fix the URL:
github.com
withraw.githubusercontent.com
blob/master
with the commit hash we found in the first step.Install the desired version by replacing
master
in the previously found URL by the commit hash, e.g.:(The last step may necessitate running
brew unlink ‹formula›
before.)If you have copied a commit hash you want to use, you can use something like this example to install that version, replacing the value and
bash
with your commit hash and your desired formula.This example is installing bash 4.4.23 instead of bash 5, though if you performed a
brew upgrade
afterward then bash 5 would get installed over top, unless you first executedbrew pin bash
. Instead to make this smoother WITHOUT pinning, you should first install the latest withbrew install bash
, thenbrew unlink bash
, then install the older version you want per the script above, and then usebrew switch bash 4.4.23
to set up the symlinks to the older version. Now abrew upgrade
shouldn't affect your version of Bash. You canbrew switch bash
to get a list of the versions available to switch to.Alternative using a custom local-only tap
Another way of achieving the same goal appears to be:
This creates a
formula@version
in your custom tap that you can install per the above example. The downside is that you probably still need tobrew unlink bash
and thenbrew link [email protected]
in order to use your specific version of Bash or any other formula.官方方法(从对 https://github.com/Homebrew/brew/issues/6028 的回复来看 )
不幸的是,Homebrew 仍然没有明显安装旧版本的内置方法。
幸运的是,对于大多数公式来说,有一种比过去必要的复杂混乱更简单的方法。以下是以
bash
为例的完整说明:这会在您的自定义 Tap 中创建
formula@version
,您可以根据上面的示例进行安装。一个重要的注意事项是,如果您之前安装了公式的默认/最新版本,则可能需要brew unlink bash
,然后brew link [email protected]
以便使用您的特定版本的 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 升级
,而没有先安装最新版本,则安装的最新版本会破坏您的旧版本,除非您首先执行brew pin bash
。这里的步骤避免固定,因为它很容易忘记,并且您可能会固定到将来变得不安全的版本(请参阅 Shellshock/等)。通过此设置,
brew 升级
不会影响您的 Bash 版本,并且您始终可以运行brew switch bash
来获取可切换到的版本列表。复制并粘贴并编辑下面代码片段中的
export
行,以使用所需的版本和公式名称进行更新,然后按原样复制并粘贴其余部分,它将使用这些变量来发挥作用。当您确定公式中存在该版本时,您可以使用以下命令:
导出要使用的提交哈希后,您可以使用它来安装该版本的包。
按照公式输出中的说明将其放入您的 PATH 或将其设置为默认 shell。
Official method ( judging from the response to https://github.com/Homebrew/brew/issues/6028 )
Unfortunately Homebrew still doesn’t have an obvious builtin way of installing an older version.
Luckily, for most formulas there’s a much easier way than the convoluted mess that used to be necessary. Here are the full instructions using
bash
as an example:This creates the
formula@version
in your custom tap that you can install per the above example. An important note is that you probably need tobrew unlink bash
if you had previously installed the default/latest version of the formula and thenbrew link [email protected]
in order to use your specific version of Bash (or any other formula where you have latest and an older version installed).A potential downside to this method is you can't easily switch back and forth between the versions because according to
brew
it is a "different formula".If you want to be able to use
brew switch $FORMULA $VERSION
you should use the next method.Scripted Method (Recommended)
This example shows installing the older bash 4.4.23, a useful example since the
bash
formula currently installs bash 5.brew install bash
brew unlink bash
brew switch bash 4.4.23
to set up the symlinks to your versionIf you performed a
brew upgrade
after installing an older version without installing the latest first, then the latest would get installed clobbering your older version, unless you first executedbrew pin bash
.The steps here AVOID pinning because it is easy to forget about and you might pin to a version that becomes insecure in the future (see Shellshock/etc). With this setup a
brew upgrade
shouldn't affect your version of Bash and you can always runbrew switch bash
to get a list of the versions available to switch to.Copy and paste and edit the
export
lines from the code snippet below to update with your desired version and formula name, then copy and paste the rest as-is and it will use those variables to do the magic.When you are certain the version exists in the formula, you can use the below:
Once you have exported the commit hash you want to use, you can use this to install that version of the package.
Follow the directions in the formula output to put it into your PATH or set it as your default shell.
Homebrew 最近发生了变化。以前有用的东西现在不再有用了。我发现最简单的工作方法(2021 年 1 月)是:
.rb
文件(首先转到 Formulas,找到我需要的,然后单击“历史记录”;对于 CMake,位于 Formulas。 com/Homebrew/homebrew-core/commits/master/Formula/cmake.rb" rel="noreferrer">https://github.com/Homebrew/homebrew-core/commits/master/Formula/cmake.rb).rb
文件差异右上角的三个点 (...),然后单击 原始。复制网址。brew unlink cmake
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 &&酿造安装./cmake.rb
瞧!您现在可以删除下载的
.rb
文件。Homebrew changed recently. Things that used to work do not work anymore. The easiest way I found to work (January 2021), was to:
.rb
file for my software (first go to Formulas, find the one I need and then click "History"; for CMake, this is at https://github.com/Homebrew/homebrew-core/commits/master/Formula/cmake.rb).rb
file diff (...) and then click Raw. Copy the URL.brew unlink cmake
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb
will fail)curl -O https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb && brew install ./cmake.rb
Voila! You can delete the downloaded
.rb
file now.我只是使用 Homebrew 回到 Maven 2.2.1,因为简单的
brew install maven
安装了 Maven 3.0.3。首先,您必须将 maven 目录留在那里,以便
使用brew tap 命令
现在您可以安装maven2 公式:
编辑:
您也可以通过
brew switch maven 2.2.1
切换到其他版本。编辑:
Apache Maven 项目重新组织了他们的存储库。更新了此答案以解释此更改。
I just used Homebrew to go back to Maven 2.2.1 since the simple
brew install maven
installed Maven 3.0.3.First you have to leave the maven dir there so
Use the brew tap command
Now you can install the maven2 formula:
Edit:
You can also just
brew switch maven 2.2.1
to switch to a different version.Edit:
The Apache Maven project reorganized their repo. Updated this answer to account for this change.
意外升级 Postgres?
我的情况:
postgresql
意外地从 11 升级到 12(在不带参数运行brew Upgrade
后)解决方案:
postgres
重命名为postgres@11
:如果有任何错误,请检查
/usr/local/ var/log/[电子邮件受保护]
(注意 @ 11)。Upgraded Postgres by accident?
My case:
postgresql
was upgraded from 11 to 12 accidentally (after runningbrew upgrade
without arguments)Solution:
postgres
topostgres@11
:If you have any errors, check
/usr/local/var/log/[email protected]
(notice the @11).基于 @tshundeee 和 @Debilski 的更新 1,我自动化了该过程并在 此脚本。
下载,将其放入您的路径中,然后
brewv;
。对于特定的OP,它将是::)
Based on the workflow described by @tschundeee and @Debilski’s update 1, I automated the procedure and added cleanup in this script.
Download it, put it in your path and
brewv <formula_name> <wanted_version>
. For the specific OP, it would be::)
其他答案都没有充分涵盖 2022 年的这一点,因此我添加了这些说明,这些说明改编自 Homebrew 维护者对安装特定 Cask 版本的类似问题的答案:https://stackoverflow.com/a/62765875/6310633
卸载公式
切换到
homebrew-core
存储库的克隆并重置为提交包含您想要的版本。为您的版本签出一个新分支,这样brew就不会在每个命令后自动刷新master,安装您的公式并固定它。
清理
当您准备好升级配方时,您可以照常
brew unpin
并升级。None of the other answers cover this adequately for 2022, so I'm adding these instructions that are adapted from a Homebrew maintainer's answer for a similar question for installing a specific Cask version: https://stackoverflow.com/a/62765875/6310633
Uninstall your formula
Switch over to your clone of the
homebrew-core
repo and reset to a commit containing the version you want.Checkout a new branch for your version so brew won't autorefresh master after each command, install your formula, and pin it.
Clean up
When you're ready to upgrade your formula, you can
brew unpin <formula>
and upgrade as usual.更新后的答案添加到了@lance-pollard 已经发布的工作答案中。
如何安装公式的特定版本(本示例中使用的公式是
terraform
):git log master -- Formula/terraform.rb
如果您已在本地克隆存储库。brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
An updated answer since that adds to what @lance-pollard already posted as working answer.
How to Install specific version of a Formula (formula used in this example is
terraform
):git log master -- Formula/terraform.rb
if you have cloned the repo locally.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
这里的其他答案都很好,但是如果您需要安装旧版本的软件包并确保修改软件包名称,则需要采用不同的方法。当使用使用
brew --prefix package_name
来确定用于编译的目录的脚本(在我的例子中为 PHP 构建脚本)时,这一点很重要。如果您使用
brew extract
,则会在包名称末尾添加一个版本,这将破坏brew --prefix
查找。以下是如何安装较旧的软件包版本,同时保留原始软件包名称:
我写了更多关于此的内容在这里。
The other answers here are great, but if you need to install an older version of the package and ensure that the package name is modified, you'll need a different approach. This is important when using scripts (in my case, PHP build scripts) which use
brew --prefix package_name
to determine what directory to use for compilation.If you are using
brew extract
a version is added to the end of the package name which will break thebrew --prefix
lookup.Here's how to install an older package version while maintaining the original package name:
I wrote more about this here.
在最新版本的自制程序(撰写本文时为 0.9.5)上,将有一个针对您要安装的自制程序桶版本的特定配方。示例:
然后像平常一样执行
brew install mongodb26
。如果您已经安装了最新版本,请确保取消链接最新版本并链接所需版本:
brew unlink mongodb &&酿造链接mongodb26
。On the newest version of homebrew (0.9.5 as of this writing) there will be a specific recipe for the version of the homebrew keg you want to install. Example:
Then just do
brew install mongodb26
like normal.In the case that you had already installed the latest version, make sure to unlink the latest version and link the desired version:
brew unlink mongodb && brew link mongodb26
.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。这将列出该文件的完整提交历史记录。您将看到如下输出:
棘手的部分是找到您想要的特定版本的最新提交。在上面,我可以看出最新的 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
重新链接。如果您随时想要恢复到特定软件包的最新版本,请进入 Formula 目录并对公式文件 (.rb) 发出以下命令,
然后您可以
brew uninstall docker-machine
和brew install docker-machine
来获取最新版本并保持这种状态。The problem with
homebrew/versions
is that someone has to have that specific version of software listed in the repository for you to be able to use it. Also, sincebrew versions
is no longer supported, another solution is required. For solutions that indicate usingbrew switch
, this will only work if you haven't done abrew cleanup
since the version needs to exist on your computer.I had a problem with wanting to install a specific older version of
docker-machine
which wasn't listed inhomebrew/versions
. I solved this using the below, which should also work for any brew installed software. The example below will usedocker-machine
as the package I want to downgrade from version 0.5.0 to 0.4.1.Go to your homebrew
Formula
directory.You can determine this by running
brew info [any package name]
.For example,
brew info docker-machine
gives me a line that shows mea path -
/usr/local/Cellar/docker-machine/0.5.0
. This tells me that on my machine, homebrew is installed at/usr/local
and myFormula
directory is located by default at
/usr/local/Library/Formula
Locate the specific formula file (.rb) for your package.
Since I want to downgrade
docker-machine
, I can see adocker-machine.rb
file.Get the version history for this formula file .
Enter
git log docker-machine.rb
. This will list out the complete commit history for this file. You will see output like this:The tricky part is to find the latest commit for the specific version you want. In the above, I can tell the latest 0.4.1 version was committed with this commit tag :
commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
. The commits above this point start using version 0.5.0 (git log entries are listed from latest to earliest date).Get a previous version of the formula file.
Using the commit tag from step #3 (you can use the first 6 chars), you can get an older version of the formula file using the following:
git checkout 5970e1 docker-machine.rb
Uninstall your current package version.
Just run the normal brew commands to uninstall the current version of your package.
Ex.
brew uninstall docker-machine
Install the older package version
Now, you can just run the normal brew install command and it will install the formula that you have checkout out.
Ex.
brew install docker-machine
You may need to re-link by using the
brew link docker-machine
if necessary.If at any time you want to revert back to the latest version of a specific package, go into the Formula directory and issue the following commands on your formula file (.rb)
Then you can
brew uninstall docker-machine
andbrew install docker-machine
to get the latest version and keep it that way going forward.编辑:2021 年,由于 github 安装已被弃用,此答案不再起作用。(感谢 Tim Smith 的更新)。
安装旧的brew包版本(Flyway 4.2.0示例)
查找本地自制程序git目录或在本地克隆Homebrew/homebrew-core
或
列出所有可用版本
复制所需版本的提交ID并直接安装
Edit: 2021, this answer is no longer functional due to the github install being deprecated. (Thanks Tim Smith for update).
Install an old brew package version (Flyway 4.2.0 example)
Find your local homebrew git dir or clone Homebrew/homebrew-core locally
OR
List all available versions
Copy the commit ID for the version you want and install it directly
我已经尝试了这里的大多数解决方案,但它们已经过时了。我必须将这里的一些想法与我自己的工作结合起来。因此,我创建了一个脚本来帮助我完成繁重的工作,您可以在此处找到该脚本
用法:
I've tried most of the solutions here and they are outdated. I had to combine some ideas from here with my own work. As a result I've created a script to help me do the heavy lifting which you can find here
Usage:
目前安装特定公式版本的旧方法已被弃用。所以看来我们必须使用
brew edit [formula]
。例如,假设我们要安装62.1
版本的icu4c
(例如postgresql 10.5
需要)。然后你必须在这里你必须改变
url
,version
和sha256
(也许还有mirror) 到相应的
62.1
字符串。然后运行
brew reinstall icu4c
最终下载62.1
版本。Currently the old ways of installing specific formula versions have been deprecated. So it seems like we have to use
brew edit [formula]
. E.g. say we want to install an the62.1
version oficu4c
(needed e.g. forpostgresql 10.5
). Then you'd have toHere you'd have to alter the
url
,version
andsha256
(perhaps alsomirror
) to the corresponding62.1
strings.then run
brew reinstall icu4c
to finally download the62.1
version.在这里,我对此的简单回答 - 真的很恼火,因为没有内置的解决方案,所以我构建了自己的懒惰“脚本”。欢迎贡献
Here my simple answer for it - was really annoyed that there is no built in solution for that so I've built my own lazy "script". Feel free to contribute ????????????
https://gist.github.com/ArgonQQ/cff4834dab6b254cc2140bb1454b47ef
对于最新版本的brew来说这可以很容易地完成。
it could be done very easy for last version of brew.
这些都不适用于我的案例(Python),所以我将添加我的 2 美分:
输出如下所示:
我想要版本
2.7.11
,因此我的哈希值是cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(或简称为cf5da05
)。接下来,我检查该版本并安装公式python
:最后,清理:
None of these really worked for my case (Python), so I'll add my 2 cents:
Output looks like this:
I want version
2.7.11
so my hash iscf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(orcf5da05
for short). Next, I check out that version and install the formulapython
:Finally, clean up:
如果您无法使用
brew search
找到您的版本,您还可以尝试查看公式的提交日志来查找您想要的版本:以下是安装旧版本的示例通过brew获取的nginx版本:
ngxnx 公式提交日志< /a>
参见
nginx:更新
从那里,我们可以安装
1.6 .3
使用 sha 和原始 git url:brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
If you can't find your version with
brew search <formula>
, you can also try going over the commit logs for your formula to find the version you want:here is an example for installing an older version of nginx via brew:
ngxnx formula commit log
see
nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
From there, we can install
1.6.3
with the sha and raw git url:brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
当我尝试使用所有其他方法时,它们不再起作用,因为 Homebrew 似乎继续对他们自己的工具发动战争。
因此,我制作了一个
brew-switch
函数,您可以将其添加到~/.zshrc
中,该函数将下载任何核心公式的任何版本(请参阅 Homebrew GitHub 上的讨论)。它的工作原理是:
Homebrew/homebrew-core
中搜索提交包含公式名称和请求版本的最新存储库,.rb
文件brew install ./.rb 来安装文件,
brew pin
以阻止
brew Upgrade
弄乱它用法一般用法是:
例如,安装版本
argocd
公式的2.8.6
:安装
1.依赖
2.在
.zshrc
中添加brew-switch
打开您的
~/.zshrc
文件,并添加brew-switch
函数。例如,如果您喜欢
vim
:将这些行添加到文件末尾:
When I tried to use all the other methods, they were no longer working, as it seems Homebrew continues to wage a war against their own tool.
So I have made a
brew-switch
function that you can add to your~/.zshrc
that will download any version of any core formula (see the discussion on the Homebrew GitHub).It works by:
Homebrew/homebrew-core
repo for the most recent one that contains the name of your formula and the requested version<formula>.rb
file from that commitbrew install ./<formula>.rb
to install the file locallybrew pin <formula>
to stopbrew upgrade
from messing with itUsage
The general usage is:
For example, to install version
2.8.6
of theargocd
formula:Install
1. Dependencies
2. Add
brew-switch
to.zshrc
Open your
~/.zshrc
file, and add thebrew-switch
function.For example, if you like
vim
:Add these lines to the end of the file:
最接近@Lance的答案,但这对我来说不起作用,在2023年,使用M1 macOS 13并试图安装特定版本的
opencv@4
。底线是:您应该使用在brew中找到的远程
opencv.rb
文件的内容覆盖本地opencv.rb
文件的内容GitHub 存储库,与您要安装的opencv
版本相对应。本质上,我们想要更新包的
.rb
文件中的url
和sha256
。但sha256
无法从opencv
Releases Github 获取 页面并在本地创建sha256
会给我抛出一个checksum
错误。但是从提交历史记录的.rb
文件中获取它们可以解决此问题。分解:只需 5 个简单步骤
首先卸载软件包:
brew uninstall opencv@4
找到您要安装的软件包的正确版本的
.rb
文件在 Homebrew 下搜索 >自制核心> Github
上的公式
在
opencv.rb
文件的历史中:https://github.com/Homebrew/homebrew-core/commits/master/Formula/opencv.rbopencv: update 4.6.0_1 Bottle。
并查看文件。打开系统上的
.rb
文件:brew edit opencv@4
将此文件的内容替换为您从 Github 下载的文件
使用
.rb
文件路径再次安装软件包:brew install /opt/homebrew/Library/Taps/homebrew/ homebrew-core/Formula/opencv.rb
效果很好对我来说,@Lance 使用
brew install
的答案给出了Error: Your Command Line Tools (CLT) does not support macOS 13.
其他答案都不适合我任何一个。
Closest to @Lance's answer but that didn't work for me as is, in 2023, using M1 macOS 13 and trying to install specific version of
opencv@4
.Bottom-line is: you should override the content of your local
opencv.rb
file with that of the remoteopencv.rb
file found in brew's GitHub repo, that corresponds to the version ofopencv
you want to install.Essentially, we want to update the
url
andsha256
in the.rb
file for the package. Butsha256
were not available from theopencv
Releases Github page and creatingsha256
locally throws achecksum
error for me. But getting them from the.rb
file from the commit history resolves this issue.Breakdown: in 5 simple steps
Uninstall the package first:
brew uninstall opencv@4
Find the
.rb
file for the correct version of the package you want to installSearch under Homebrew > Homebrew-core > Formula on Github
In the history of the
opencv.rb
file: https://github.com/Homebrew/homebrew-core/commits/master/Formula/opencv.rbopencv: update 4.6.0_1 bottle.
and View file.Open the
.rb
file on your system:brew edit opencv@4
Replace the contents of this file with the file you downloaded from Github
Install the package again using the
.rb
file path:brew install /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/opencv.rb
This worked perfectly for me, whereas, @Lance's answer using
brew install
gave anError: Your Command Line Tools (CLT) does not support macOS 13.
None of the other answers worked for me either.