Henry Dang
Henry Dang

Reputation: 853

How to install older versions using Homebrew

I'm trying to install memcached with older versions (ex: 1.4.5) but I'm not sure how to do it.

brew install memcached installs the latest.

I also tried brew install memecached1.4.5 but it didn't work.

Upvotes: 73

Views: 134608

Answers (6)

Radu Chiriac
Radu Chiriac

Reputation: 1424

This works in 2019

brew unlink memecached
brew install [email protected]
brew link [email protected] --force

Upvotes: 13

Leksat
Leksat

Reputation: 3071

If the version you are looking for was already deleted from the Homebrew repository:

  1. Find the formula in the Homebrew repo. For example, I needed solr.
  2. Go to the file History and find the version you need. For example, I needed solr 8.11.2.
  3. Get the Raw link to the file and get it locally. For my case:
    curl -o /tmp/solr.rb https://raw.githubusercontent.com/Homebrew/homebrew-core/8400730997ae589261783a1973896d2c3cdd6791/Formula/solr.rb
    
  4. Install the formula but make sure the autoupdate is turned off. For my case:
    HOMEBREW_NO_AUTO_UPDATE=1 brew install --formula /tmp/solr.rb
    
  5. Pin the formula so that it is not updated by accident. For my case:
    brew pin solr
    
  6. Follow homebrew instructions as usual.

Upvotes: 8

Adrian
Adrian

Reputation: 9590

Usually, you can check if multiple versions are available and you can specify the version with @. e.g. brew install [email protected]

$ brew info memcached

memcached: stable 1.4.24
High performance, distributed memory object caching system
https://memcached.org/
Conflicts with:
  mysql-cluster (because both install `bin/memcached`)
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/memcached.rb
...

If is not available the version you want you can go to the repo, and check the history

cd "$(brew --repo homebrew/core)"
git log master -- Formula/memcached.rb

Then you can find the commit you are looking for

commit 5ec463decefeaab3d1825b923ad2dbee73ffc6dc
Author: Adam Vandenberg <[email protected]>
Date:   Fri Apr 9 21:19:48 2010 -0700

    Update memcached to 1.4.5

Checkout that version and install:

cd "$(brew --repo homebrew/core)" && git checkout 5ec463decefeaab3d1825b923ad2dbee73ffc6dc
HOMEBREW_NO_AUTO_UPDATE=1 brew install memcached

Once you get the version installed:

git checkout master  # bring brew back to its latest version
brew pin memcached   # [optional] prevent formula from updating

and, that's it!

Upvotes: 167

vike
vike

Reputation: 383

Sharing an interactive oneliner I made for myself of Adrian's answer now:

It does a simple parsing, depending only on "/blob/" in the github URL, of "From" in brew info, and does a bash select of commit from git log.

brew install can be replaced with brew reinstall as needed.

Tested (for cask "name=powershell") in bash 5.1 (from macports ;P) and env -i /bin/bash 3.2 on macOS (High Sierra) 10.13.6 against brew 3.3.11. (I might have done some tap'ing the other day.)

(name= && { [[ $name ]]||read -ep "Name: " name;} && [[ $(brew info "$name"|sed -Ene'/^From: (.*)/s//\1/p') =~ ([^/]*)/blob/([^/]*)/([^/]*)/([^/]*) ]] && V=("${BASH_REMATCH[@]:1}") && N=(repo current dir file) && for s in ${!N[@]};do eval "${N[s]}=\${V[s]}" && declare -p >&2 "${N[s]}";done && cd "$(brew --repo "${repo//-//}")" && IFSO="$IFS" && IFS=$'\n' && select line in $(git log --oneline master -- "$dir/$file");do IFS="$IFSO" && commit=($line) && break;done && set -x && git checkout "$commit" && HOMEBREW_NO_AUTO_UPDATE=1 brew install "$name" && git checkout master)

Skål, salud, cheers!

Upvotes: 2

ryansept
ryansept

Reputation: 161

2021 update:

$ curl https://raw.githubusercontent.com/Homebrew/homebrew-cask/<commit-hash>/Casks/<FORMULA>.rb > $(find $(brew --repository) -name <FORMULA>.rb)
$ brew reinstall <FORMULA>

You can find the cask or formula file URL here and the commit message should describe the file version to grab the URL for.

https://github.com/Homebrew/homebrew-core/commits/master/Formula/<formula>.rb
https://github.com/Homebrew/homebrew-cask/commits/master/Casks/<cask>.rb

Credit: https://remarkablemark.org/blog/2017/02/03/install-brew-package-version/

Upvotes: 5

dragon788
dragon788

Reputation: 3901

A more expanded version of the good answer from Adrian is also here on SO.

https://stackoverflow.com/a/53766019/3794873

One thing to keep in mind is that if you are installing an older Formula the Homebrew API/methods may have changed since that time so you should brew edit appFormula against the current version and compare to the brew edit [email protected] if you encounter any errors trying to brew install [email protected] after the brew extract command in the answer linked.

Upvotes: 2

Related Questions