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に戻して問題が無いかチェックしてみる必要がありますよ、ということで。