Homebrewで古いバージョンのパッケージを無理矢理インストールする

f:id:june29:20160214144932p:plain

先日から弊社にてインターンをシップしておりまして、ぼくは畏れ多くもメンターというやつを担当させてもらっています。インターンシップというのは現実世界の出来事であって、そして現実世界には、のっぴきならない事情というものがあったりして、止むを得ず、最新版ではないパッケージをインストールしなければならなかったりします。

以前は brew versions っていうコマンドがあったのだけど brew-versions: move to Contributions. by mikemcquaid · Pull Request #30298 · Homebrew/homebrew で廃止されて、今は代替手段として https://github.com/Homebrew/homebrew-versions が用意されていたりするのだけれどここのラインナップがまぁまぁで。このエントリでは、無理矢理インストールする方法をメモしておきます。

git fetch --unshallow

Homebrew をインストールすると /usr/localhttps://github.com/Homebrew/homebrewfetch されてくる。けど、ぼくの知らない間に Default to shallow clone by xu-cheng · Pull Request #8 · Homebrew/install ってのがあって、2015年4月から「デフォルトでは shallowfetch する」ことになっていて、インターン生の環境で git log を見てみたらすべてが 1 commit にまとめられていて過去のバージョンを参照できなくてビビった。すでに 60,000 以上の commit を重ねてきた Homebrew のリポジトリ、畳んでおかないと重くて仕方ない、ということじゃろうか。

git fetch --unshallow っていう初めて実行するコマンドで無事にすべての commit を表示できた俺たち一行は、対象パッケージの古い Formula を checkout して、それから brew install することでご所望のバージョンをインストールすることができた。おつかれさまでした。

手順まとめ

(ここでは「mysql」の「5.6.27」をインストールしたい場合の例を示す)

$ cd /usr/local
$ git fetch --unshallow
$ git log Library/Formula/mysql.rb # 5.6.27 の SHA-1 hash である「e466819900719b711f572837750654baf3bf85cb」を見つけてくる
$ git checkout e466819900719b711f572837750654baf3bf85cb Library/Formula/mysql.rb
$ brew install mysql