Brew-file
にupdate
というBrewfileのアップデートと
それに伴うHomebrewパッケージのアップデートを行うコマンドがありますが、
この中でBrewfileに無いパッケージを削除するclean
というコマンドも
実行するようになっていました。
これが気づかないうちに色々パッケージを消してしまうことがあるので デフォルトでは実行しないようにしました。
Brew-fileのupdateコマンド
brew file update
を実行すると、これまでは
brew file pull
: RepositoryにあるBrewfileをpullbrew file install
: pullしてきたBrewfileに従いパッケージをインストールbrew file clean
: pullしてきたBrewfileにないパッケージを削除brew update
: Homebrewのアップデートbrew upgrade
: Homebrewのパッケージアップグレードbrew file init
: 現在のパッケージリストからBrewfileを作成brew file push
: 作成したBrewfileをpush
を実行していました。
複数の環境でBrewfileをGitHubなんかで管理している時、 一方の環境でパッケージを足したらもう一方にも自動的に加えられる様にしてあります。
加えて、一方の環境で削除したパッケージももう一方の環境で
自動で削除して状況を同期してしまおう、というのがclean
も入れている動機です。
ですが、これにはちょっと問題があって、複数で管理していなくても、 きちんとBrewfileがアップデートされていないとインストールした パッケージが削除されてしまうことがあります。
brew-wrap
を導入していればbrew install
でパッケージをインストールした場合
Brewfileは自動的にアップデートされパッケージが追加される様にはなっています。
また、この辺以前ちょっと改良して、
brew install
時にインストールするパッケージに依存するパッケージがあり
それらも同時にインストールする場合、
それら依存パッケージもきちんとBrewfileに書き込む様にしています。
なのでbrew-wrapを利用している場合、
通常インストールするパッケージや、またcask
を利用して
アプリをインストールする場合は問題になりません。
ただ、この前からApp Storeでインストールしたアプリも管理できる 様にしましたが、 GUIなApp Storeアプリからアプリをインストールした場合 当然Brewfileはアップデートされません。
なのでインストール後、brew file init
を実行するなど
手動で更新する必要があります。
これをしないまま、レポジトリのBrewfileをアップデートしようと
brew file update
を実行してしまうと
上の実行順序で分かるようにBrewfileを自前環境で更新する前にclean
を実行するため
新しくApp Storeからインストールしたアプリが削除されてしまいます。
削除されたものをきちんと同期するよりも
予期せず削除されることを避けた方が良いと思うので
このclean
に関してはデフォルトで実行しない事にしました。
clean
も実行したい場合は
$ brew file update -C
と-C
オプションを付けるとclean
も含めて実行できる様になっています。
後、上の実行順を改めて見てみて、
brew update/upgrade
を中途半端なところで行ってるので
これらは一番最初に実行するようにも変更してあります。
(install
した後にアップデートがあると二度手間になるので。)