如何在自制软件中安装特定版本的公式?例如,postgresql-8.4.4 而不是最新的 9.0。
当 homebrew 安装一个新公式时,它会将它放在一个版本化的目录中,例如/usr/local/Cellar/postgresql/9.3.1. 然后全局安装此文件夹的符号链接。原则上,这使得在两个已安装版本之间切换非常容易。(*)
/usr/local/Cellar/postgresql/9.3.1
如果您使用自制软件的时间更长并且从未删除过旧版本(例如使用brew cleanup),那么您的程序的某些旧版本可能仍然存在。如果您想简单地激活以前的版本,brew switch这是最简单的方法。
brew cleanup
brew switch
检查brew info postgresql(或brew switch postgresql <TAB>)是否安装了旧版本:
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&自制版本存储库。
brew tap
该版本存储库可能包含多个公式的旧版本的反向移植。(大多数只有大的和著名的,但当然他们也会有几个用于 postgresql 的公式。)
brew search 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。)以下将是等效的:
homebrew/versions
brew untap homebrew/versions
$ brew tap homebrew/versions $ brew install postgresql8
只要向后移植的版本公式保持最新,这种方法可能是处理旧软件的最佳方法。
列出以下方法主要是为了完整性。两者都试图从 brew 存储库中复活一些不死公式。由于更改的依赖项、公式规范中的 API 更改或只是下载 URL 的更改,事情可能会或可能不会起作用。
由于整个公式目录是一个 git 存储库,因此可以使用普通的 git 命令安装特定版本。但是,我们需要找到一种方法来获得旧版本可用的提交。
a) 历史时期
在2011 年8 月到 2014 年 10 月之间,自制软件有一个brew versions命令,它会吐出所有可用版本及其各自的 SHA 哈希值。自 2014 年 10 月起,您必须先执行一次brew tap homebrew/boneyard才能使用它。正如水龙头的名称所暗示的那样,您可能只应将其作为最后的手段。
brew versions
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) 史前时代
对于特殊需求,我们也可以尝试自己挖掘 homebrew repo。
$ 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。结果我们得到了两次提交。
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 或多或少保证有效):
fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 $ brew install postgresql $ git checkout master $ git branch -d postgresql-8.4.4
您可以跳过最后一个命令以将引用保留在您的 git 存储库中。
注意事项:签出较旧的提交时,您会暂时降级您的自制软件安装。因此,您应该小心,因为 homebrew 中的某些命令可能与最新版本不同。
这不是太难,然后您可以将其上传到您自己的存储库。曾经是Homebrew-Versions,但现在已停产。
如果您想在执行自然过程时保留某个版本(例如 postgresql)并阻止其更新brew update; brew upgrade,您可以固定一个公式:
brew update; brew upgrade
$ brew pin postgresql
固定公式列在中/usr/local/Library/PinnedKegs/,一旦您想要引入最新的更改和更新,您可以再次取消固定它:
/usr/local/Library/PinnedKegs/
$ brew unpin postgresql