How do I install a specific version of a formula in homebrew? For example, postgresql-8.4.4 instead of the latest 9.0.
(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
(or brew switch postgresql <TAB>
) whether the older version is installed:
$ 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
We see that some older version is already installed. We may activate it using 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
Let’s double-check what is activated:
$ 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
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, using brew 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:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
We can simply install it by typing
$ 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
# …
Note that this has automatically tapped the homebrew/versions
tap. (Check with brew tap
, remove with brew untap homebrew/versions
.) The following would have been equivalent:
$ brew tap homebrew/versions
$ brew install postgresql8
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 a brew 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.
$ 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
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.
# 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
Now that the older postgresql version is installed, we can re-install the latest formula in order to keep our repository clean:
$ git checkout -- Library/Formula/postgresql.rb
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'8.4.4' -- Library/Formula/postgresql.rb
git log -S
looks for all commits in which the string '8.4.4'
was either added or removed in the file Library/Formula/postgresql.rb
. We get two commits as a result.
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
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):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
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 Homebrew-Versions.
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:
$ brew pin postgresql
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:
$ brew unpin postgresql
- 17You can also just checkout the formula using
git checkout fa992 -- Library/Formula/postgresql.rb
. When you're done, you can undo the changes to the formula usinggit revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
. – mipadi Jan 3 '11 at 20:59 - 18Note: on a fresh Homebrew install, you may need to
brew update
to establish its Git repo. – Bluu May 28 '11 at 0:57 - 87
- 345
- 18As of today, the correct directory to execute the manual commands against the repository is
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, then you can usegit checkout 4cce79d -- Formula/go.rb
andHOMEBREW_NO_AUTO_UPDATE=1 brew install go
. – Calin Feb 18 '17 at 10:02
Simple Workflow
Now that Homebrew/versions has been deprecated, Homebrew/core supports multiple versions of formulae with a new naming format.
To install a specific version, e.g. postgresql 9.5 you simply run:
$ brew install postgresql@9.5
To list the available versions run a search with @:
$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ✔ postgresql@9.4 postgresql@9.5 postgresql@9.6
- 8Seems like the simplest, but when I copy and paste, get
fatal: Not a git repository (or any of the parent directories): .git
. I justcd
into the directory instead (without the FORMULANAME.rb), then do thegit checkout 120938
– Ramon Tayag Jul 1 '12 at 12:28 - 8
- 12
- 22
- 4@dem7w2, you can create the symlinks with
brew link --force postgresql@9.5
. If you already have a newer version installed and want the older version to be your default, you'll need an--overwrite
in there too. – Ryan Aug 16 '17 at 14:52
There's now a much easier way to install an older version of a formula that you'd previously installed. Simply use
brew switch [formula] [version]
For instance, I alternate regularly between Node.js 0.4.12 and 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Since brew switch
just changes the symlinks, it's very fast. See further documentation on the Homebrew Wiki under External Commands.
- 2I tried this, and it succeded with the message " 33 links created for /usr/local/Cellar/node/0.4.7 " , but when I run node afterwards, it fails with the message " -bash: /usr/local/bin/node: No such file or directory " . Any idea what couldlve gone wrong? Note: i downloaded 0.4.7 manually and put it in the cellar directory, because I dont know how to download anyhting but the latest node version using brew. – Soroush Hakami Dec 22 '11 at 21:36
- 6I hope you do know there is something called 'nvm'[github.com/creationix/nvm]! – Gaurav Agarwal May 27 '13 at 16:00
- 6
- 29I relies on the package version already being installed. If you are missing the version you will still need to apply the selected answer. – Nic Strong Dec 19 '13 at 5:11
- 2@NicStrong Indeed,
brew switch
relies on the sought-after version being already installed. Unfortunately, though, the currently accepted answer is incredibly unhelpful, convoluted, and outdated. There are better answers below which are much more helpful. – GDP2 Dec 8 '17 at 2:46
Update: 1/15/2015
- Find the commit history of the desired software and version. e.g. I need to switch from docker version 1.4.1 to 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
- View the file with this button:
- Click the Raw button:
- Copy the URL (docker.rb url in this example) from address bar
brew install <url>
(may have tobrew unlink
first, e.g.brew unlink docker
)brew switch docker 1.3.3
- Switch back to docker 1.4.1
brew switch docker 1.4.1
From this gist
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
- 34This is the only thing that worked for me. Pretty silly that a package manager requires so much futzing around just to install a prior version. Perhaps I'm spoiled by ruby RVM and bundler, but this process really needs to be streamlined and abstracted. – poetmountain Nov 3 '13 at 2:30
- 3When I tried to go to a previous version of Ansible, I had to unlink the formula before installing the previous version as indicated. So before doing
brew install <url>
,brew unlink <formulaname>
. Otherwise, this is the simplest and most concise way (so far) to switch to a specific version of a formula. – bigsweater Jun 9 '15 at 16:15 -
- 1It works, but occasionally you have to download the raw .rb file and change the checksum to avoid Homebrew complaining about SHA mismatch. GitHub seems to have a large portion of repo trees rearchived sometime in 2017, and their checksums changed. (Actually it caused much confusion in my team when Bazel began to fail on hash mismatches last July) – Chang Qian Feb 1 '18 at 9:27
- 1
I've discovered a better alternative solution then the other complex solutions.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
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.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
- 1hmm,
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
seemed to fail with syntax errors. – Brian Armstrong Dec 17 '12 at 7:43 - 5@BrianArmstrong You're referring to an html-formatted version of the file, while you need a raw version. – Nikita Volkov Jun 27 '13 at 14:53
- Go to github.com/Homebrew/homebrew/commits/master/Library/Formula/…, pick your version, browse code, raw - use this url. – jpillora Jun 29 '14 at 11:45
- 1
- 6
homebrew-versions
is gone and everything's oncore
now, so the general case is:brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
.COMMIT
can be found by going to github.com/Homebrew/homebrew-core/commits/master/Formula/…. – PJSCopeland Jan 18 '18 at 20:48
Along the lines of @halfcube's suggestion, this works really well:
- Find the library you're looking for at https://github.com/Homebrew/homebrew-core/tree/master/Formula
- Click it: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
- Click the "history" button to look at old commits: https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb
- Click the one you want: "postgresql: update version to 8.4.4", https://github.com/Homebrew/homebrew-core/blob/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
- Click the "raw" link: https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
- 2This is the easiest way to install needed version of a package if it's unavailable in core repo as
package@version
– avy Apr 17 '17 at 10:33 - 4If you can't use the web interface, you can clone the repo and do it locally: use
git log master -- Formula/PACKAGENAME.rb
to get the commit history, check out the correct commit, and then runbrew install Formula/PACKAGENAME.rb
to install it. – chipbuster Jun 1 '17 at 10:43 - 4
-
- 1I do this
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
but get the error, probably due to@
sign: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.
Any ideas? – msciwoj Jul 11 '18 at 10:40
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.
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:
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).Install it with
$ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
NOTE: This answer was updated to account for the removal of the braumeister.org website. The same principle applies, braumeister had simply provided a beginner-friendly way to navigate formula versions.
- 12Unfortunately this is too far down in the list of answers but is the best solution. This is what I use, except instead of using braumeister I just go to the Homebrew GitHub page of the formula that I want (e.g. for gcc go to github.com/Homebrew/homebrew/blob/master/Library/Formula/gcc.rb) and then I go through the "History" of the file until I get to the version that I want. – Guy Kogus Mar 31 '16 at 7:49
- 3This was definitely the best solution in my case - installing an older version of Watchman that did not require Xcode 8.1 – Zachary Keener Nov 17 '16 at 17:59
- 3
- 3This is really the easiest way to install an older version. Great answer – Martin M Mar 4 '17 at 20:28
- 4
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
$ brew unlink maven
Use the brew tap command
$ 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
Now you can install the maven2 formula:
$ 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"
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.
- 1
-
- This was very helpful. Note, the apache foundation has reorganized the maven binaries into version (1,2,3) specific directories, so you will need to edit the maven.rb for 2.2.1 and perhaps others to fit the new structure. For example, the binary for 2.2.1 was located at: apache.org/dist/maven/maven-2/2.2.1/binaries/…. Note the "maven-2/2.2.1/" in the url. – Charles Forcey Feb 5 '13 at 7:22
- @CharlesForcey You are correct about the maven dist repo being reorganized. I will update the answer to use brew tap to use the older maven2 formula. Thanks for the comment. – Cameron Goodale Feb 6 '13 at 20:31
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:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
- 4
- 2
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
):
- Find your formula file, e.g: https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb
- Get the commit version from github’s history with https://github.com/Homebrew/homebrew-core/commits/master/Formula/terraform.rb or
git log master -- Formula/terraform.rb
if you have cloned the repo locally. - Get the raw git URL with the commit version of your formula: If the formula link in github.com is https://github.com/Homebrew/homebrew-core/blob/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb, your raw URL will be: https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
- Install it with:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
- To get the raw git URL in step 3, you can also just hit the "Raw" button and copy the URL that the browser takes you to. – Brian Topping Jan 12 '18 at 17:58
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:
$ brew search mongodb
mongodb mongodb24 mongodb26
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
.
- While this may answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference. – Erik Apr 30 '15 at 22:25
- 1
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, since brew versions
is no longer supported, another solution is required. For solutions that indicate using brew switch
, this will only work if you haven't done a brew 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 in homebrew/versions
. I solved this using the below, which should also work for any brew installed software. The example below will use docker-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 runningbrew info [any package name]
. For example,brew info docker-machine
gives me a line that shows me a 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:
...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
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)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Then you can brew uninstall docker-machine
and brew install docker-machine
to get the latest version and keep it that way going forward.
- 1Very thorough write up @rchawdry, thank you. BTW: to find the commit that matches the version you want quickly add the --grep parameter
git log --grep 0.4.1 docker-machine.rb
. – Jerry Mindek Nov 10 '15 at 19:24 - For me, the path was
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
– akauppi Oct 24 '16 at 4:07 - I wasn't able to find enough of version history for the
cairo
brew in this way. @sealocal's answer showed more, for some reason. – akauppi Oct 24 '16 at 4:07
it could be done very easy for last version of 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)
- 2
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:
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
None of these really worked for my case (Python), so I'll add my 2 cents:
cd `brew --prefix`
git log Library/Formula/python.rb
Output looks like this:
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. ...
I want version 2.7.11
so my hash is cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(or cf5da05
for short). Next, I check out that version and install the formula python
:
git checkout cf5da05
brew install python
Finally, clean up:
git checkout master
- 1Life changes and this answer is most relevant. Do not forget about
HOMEBREW_NO_AUTO_UPDATE
and read github.com/Homebrew/brew/issues/1188 – Wile E. Oct 4 '16 at 10:27 - The correct commands are
cd
brew --prefix/Homebrew
andgit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
– Iulian Onofrei Jan 15 '18 at 14:34 -
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
, postgresql@9.4
…).
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:
brew log --format=format:%H\ %s -F --grep=‹version› ‹formula›
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:
brew info ‹formula› | grep ^From:
Fix the URL:
- Replace
github.com
withraw.githubusercontent.com
- Replace
blob/master
with the commit hash we found in the first step.
- Replace
Install the desired version by replacing
master
in the previously found URL by the commit hash, e.g.:brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(The last step may necessitate running brew unlink ‹formula›
before.)
Install an old brew package version (Flyway 4.2.0 example)
Find your local homebrew git dir or clone Homebrew/homebrew-core locally
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
OR
git clone git@github.com:Homebrew/homebrew-core.git
List all available versions
git log master -- Formula/flyway.rb
Copy the commit ID for the version you want and install it directly
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Library/Formula/flyway.rb
Update on the Library/Formula/postgresql.rb line 8 to
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
And MD5 on line 9 to
fcc3daaf2292fa6bf1185ec45e512db6
Save and exit.
brew install postgres
initdb /usr/local/var/postgres
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:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Try initdb /usr/local/var/postgres
again, and it should run smooth.
To run postgresql on start
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Hope that helps :)
I just copied an older release of elasticsearch into the /usr/local/Cellar/elasticsearch
directory.
$ 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
That's it. Maybe it's useful for anyone.
- An ugly hack. But, yeah it worked for me as well, while I was trying to search & install an older version of consul! Cheers. – darkdefender27 Apr 6 '18 at 12:50
I decided, against my better judgment, to create a formula for Maven 3.1.1, which homebrew/versions
did not have. To do this:
- I forked
homebrew/versions
on github. - I symlinked from
$(brew --prefix)/Library/Taps
to the local working copy of my fork. I'll call thismy-homebrew/versions
. - I tested by specifying the formula as
my-homebrew/versions/<formula>
. - I sent a pull request to
homebrew/versions
for my new formula.
Yay.
For versions not currently in the default brew formulas, you can easily create your own tap with the tool from https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
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 the 62.1
version of icu4c
(needed e.g. for postgresql 10.5
). Then you'd have to
> brew edit icu4c
# drops you to editor
Here you'd have to alter the url
, version
and sha256
(perhaps also mirror
) to the corresponding 62.1
strings.
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"
then run brew reinstall icu4c
to finally download the 62.1
version.
nodejs
as an example:brew search node@
thenbrew install node@8
– MarkHu May 14 '18 at 21:20brew switch
command e.g I haveicu4c
both in version59.1
and62.1
and want use as major older one so Ibrew switch icu4c 59.1
– andilabs Sep 10 '18 at 14:53