Carpe Diem

備忘録

Homebrewで過去のバージョンを使いたい

概要

新しいMacBookを使い始めたところ以前利用していた古いバージョンのツールを使う必要が出てきたのですが、意外と手間だったので忘れないようにまとめ。

環境

旧バージョンをインストールしたことがある場合

brew switchで古いバージョンに変更できます。どんなバージョンがインストール済みかはbrew infoで確認できます。

$ brew info terraform
terraform: stable 0.8.2 (bottled), HEAD
Tool to build, change, and version infrastructure
https://www.terraform.io/
/usr/local/Cellar/terraform/0.7.2 (3 files, 121.5M)
  Poured from bottle on 2016-09-05 at 21:50:16
/usr/local/Cellar/terraform/0.7.3 (3 files, 122.4M)
  Poured from bottle on 2016-09-08 at 01:50:24
/usr/local/Cellar/terraform/0.7.4 (3 files, 123.6M)
  Poured from bottle on 2016-09-22 at 09:43:38
/usr/local/Cellar/terraform/0.7.5 (4 files, 123.3M)
  Poured from bottle on 2016-10-10 at 10:49:37
/usr/local/Cellar/terraform/0.7.6 (4 files, 76.3M)
  Poured from bottle on 2016-10-18 at 00:01:42
/usr/local/Cellar/terraform/0.7.7 (4 files, 76.3M)
  Poured from bottle on 2016-10-23 at 21:51:09
/usr/local/Cellar/terraform/0.7.8 (4 files, 78.5M)
  Poured from bottle on 2016-11-02 at 21:32:15
/usr/local/Cellar/terraform/0.7.9 (4 files, 78.7M)
  Poured from bottle on 2016-11-09 at 22:16:13
/usr/local/Cellar/terraform/0.7.10 (4 files, 78.9M)
  Poured from bottle on 2016-11-14 at 23:13:43
/usr/local/Cellar/terraform/0.7.13 (4 files, 87M)
  Poured from bottle on 2016-11-29 at 21:54:18
/usr/local/Cellar/terraform/0.8.0 (4 files, 95.5M)
  Poured from bottle on 2016-12-15 at 23:40:08
/usr/local/Cellar/terraform/0.8.1 (4 files, 95.5M)
  Poured from bottle on 2016-12-17 at 10:01:35
/usr/local/Cellar/terraform/0.8.2 (4 files, 96.8M) *
  Poured from bottle on 2016-12-22 at 21:49:28

こんな感じに一覧が表示されるので、変更したいバージョンを指定します。

$ brew switch terraform 0.8.1

確認します。

$ terraform version
Terraform v0.8.1

大丈夫ですね。

インストールしたことがない場合

大きな流れは以下です。

  1. 古いバージョンのコミットを見つける
  2. リポジトリ/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/をそのコミットに戻す
  3. インストール
  4. リポジトリを元の最新の状態に戻す

brew logでコミットを確認

まずはbrew logでインストールしたいバージョンのコミットをチェックアウトできるか確認します。

$ brew log glide --oneline
8d66a976d5 glide: update 0.12.3 bottle.
b2d1084634 glide 0.12.3
44aa87e98c glide: update 0.12.2 bottle.
ec3ae89f7f glide: improve coding style of test (#4784)
abc6d3df62 glide: update 0.12.2 bottle.
2095df5eae glide 0.12.2
e5743660d4 glide: update 0.12.1 bottle.
ffdcb0fd8a glide: update 0.12.1 bottle.
d4682203f4 glide 0.12.1
74f6893fc8 glide: update 0.12.0 bottle.
f48f224fcd glide 0.12.0

Homebrewは標準ではshallow cloneされていてgitの履歴が少ないです。今回欲しいのは0.11.xだったので、ありませんでした。


古いコミットをfetch

リポジトリのあるディレクトリに入ります。

$ cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/

全コミットを取得します。

$ git fetch --unshallow

非常に大きいので結構時間がかかりますが気長に待ちます。
fetchできたらコミットを確認します。

$ brew log glide --oneline | grep 0.11
794969f1c4 glide: update 0.11.1_1 bottle.
e1be650a33 glide: update 0.11.1 bottle.
a500ad1cb4 glide 0.11.1
797f0278cc glide: update 0.11.0 bottle.
506b556f27 glide 0.11.0

0.11.xのものであれば良かったので、一番上(一番新しい)の794969f1c4を使います。


チェックアウト

リポジトリを古いバージョンの頃に戻します。全部戻すのは無駄なので、glide.rbのみを戻します。

$ git checkout 794969f1c4 glide.rb

現バージョンのアンインストール

新しいバージョンを保持しているとインストールできないのでアンインストール。

$ brew uninstall glide

今使っているものだけアンインストールすればよいです。brew unlinkでもいいかもです。


インストール

$ brew install glide

確認します。

$ glide --version
glide version 0.11.1

インストールできました。


リポジトリを元に戻す

リポジトリが古い状態になってしまっているので、戻します。

$ git reset HEAD
$ git checkout .

unshallowでfull cloneしたことでbrewのgitが重くなるかも…と不安な方は以下の方法でlogを減らせます。

/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core

$ git fetch --depth=1
$ git gc
$ git prune

お疲れ様でした。

ソース