Homebrewで作業をしている時にどうも人と環境が違うな、と思っていたら、 現在のHomebrewではstable versionとmaster branchを使うdeveloper versionがあって、 いつの間にかdeveloper versionになっていました。
以前は全てmaster branchを追う形になっていましたが、1.0.0辺りから この辺のstableなリリースの形を始めたみたいです。
Homebrewのバージョンチェック
通常Homebrewのバージョンをチェックすると
$ brew --version
Homebrew 1.1.7
Homebrew/homebrew-core (git revision 7af1a; last commit 2017-01-17)
こんな感じでバージョンが表示されるはずです。 これが、もしdeveloper versionnになっていてmasterブランチのものを追ってるとすると、
$ brew --version
Homebrew 1.1.7-32-g10b8d27d11
Homebrew/homebrew-core (git revision 7af1a; last commit 2017-01-17)
こんな感じでHomebrwのバージョンの後ろにcommit番号(-32-gの後の10b…)が 追記される様なバージョンになります。
Homebrewのdeveloper version
このdeveloper versionになる方法は2つあって、一つは
export HOMEBREW_DEVELOPER=1
という環境変数を設定しておくことです。
この状態でbrew updateを走らせるとdeveloper versionになります。
man brewだと
HOMEBREW_DEVELOPER
If set, Homebrew will tweak behaviour to be more relevant for
Homebrew developers (active or budding) e.g. turning warnings
into errors.
としか書いてありませんが、一度でもHOMEBREW_DEVELOPERを設定して
brew updateすると、その後はHOMEBREW_DEVELOPERを設定しなくても
ずっとdevelper versionのままになります。
もう一つはbrew auditやbrew testなど、dev-cmdにあるコマンド群達を呼んだときで、
これらを一度でも呼んだ後にbrew updateをするとdeveloper versionになります。
実際にどうなってるかというと、Homebrewがインストールされてるディレクトリで
ブランチがmasterであるかstableであるかによって切り替えを行っています。
$ cd /usr/local/Homebrew/
$ git branch
master
* stable
v1.0.2
v1.0.4
stableになってれば通常のバージョンでmasterになってれば
そのままレポジトリのmasterを追う形になっています。
stableは
GitHubのリモートレポジトリ
の方には無いローカルだけのブランチで、
Releasesの最新のものから作られています。
brew updateをすると、通常の場合はこのstableブランチの更新を行いますが、
既にmasterブランチである場合、HOMEBREW_DEVELOPERが設定してある場合、これまでに
dev-cmdを使ったことがある場合はmasterブランチに切り替わってmasterブランチの更新を行います。
stable versionに戻す
stable versionに戻すにはbrewのコマンドからではいけなそうで、手動で行う必要があります。
上に書いた通りgitのブランチで管理されてるので、
$ cd /usr/local/Homebrew/
$ git checkout stable
としてあげればstable versionに戻れます。
但し、dev-cmdを使って移ってしまった場合はこのまままたbrew updateをすると
develper versionに戻ってしまいます。
このフラッグは/usr/local/Homebrew/.git/configの中にある
[homebrew]
...
devcmdrun = true
となってるhomebrew.devcmdrunと言う値です。
この値がtrueになってるとbrew updateの際にmasterブランチに変更されます。
なので、直接この行を消すなり、
$ git config --file /usr/local/Homebrew/.git/config --unset homebrew.devcmdrun
等としてこの設定を消してあげる必要があります。
これでbrew updateをしてもブランチの切り替えは起こらずにstable versionのままでいられます。
まとめ
この設定は以下のbrew-gemに出したpull requestに対して Homebrewのcommitterの人が返事をしてくれて分かりました。
added –ignore-dependencies option to uninstall by rcmdnk · Pull Request #37 · sportngin/brew-gem
brew versionの表示が比べるとなんか変だな、とは思ってたんですが、
自分の方が勝手にdeveloper versionになっていて違いが出てた様です。
dev-cmdにあるコマンドは、Homebrew自体の開発用以外にも、 Formulaのチェック用のコマンドもあるので、 それらのどれかは使ってるはずでずっとdeveloper version側を使ってたみたいです。
特に大きな問題があるわけではないのですが、 上みたいにHomebrew関係で何か問題が起こった時には一度 Homebrewのバージョンをチェックしてみて、developer versionなら stable versionに戻して問題が無いかチェックしてみる必要がありますよ、ということで。

