brew updateとupgradeの違い

manに書いてあることではありますが,忘れてしまうので記しておきます.

  • updateは,Homebrew自体を最新版にして,内部で管理しているformula(パッケージ)も最新版にする.
  • upgradeは,Homebrew内部で管理しているformulaのみを最新版にする.
  • upgradeは,特定のformula名を指定して,それだけ更新することもできる

このような形です.

brew upgrade opencv
  • updateは,Homebrewの管理フォルダ内に登録されていないファイルがあると,エラーになる.(具体的には,gitで管理されていないファイルがあるとダメ)

たとえば以下のようなもののことです.

# error: The following untracked working tree files would be overwritten by merge:
# 	Library/Formula/lbdb.rb
# Please move or remove them before you can merge.
# Aborting
# Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

これはHomebrewの管理フォルダに,gitでいうところの"Untracked files"があることを示しています.
(私の場合は /use/local)

cd /usr/local
git status .
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	Library/Formula/git-diffall.rb
#	Library/Formula/git-subtree.rb
#	Library/Formula/lbdb.rb
#	Library/Formula/libdrizzle.rb
#	Library/Formula/metapixel.rb
#	Library/Formula/readpst.rb
#	Library/Formula/rogue.rb
#	Library/Formula/scummvm.rb

少々乱暴ですが,以下のようにUntracked filesを消せば,Homebrewを正常にupdateできます.

git clean -f
# Removing Library/Formula/git-diffall.rb
# Removing Library/Formula/git-subtree.rb
# Removing Library/Formula/lbdb.rb
# Removing Library/Formula/libdrizzle.rb
# Removing Library/Formula/metapixel.rb
# Removing Library/Formula/readpst.rb
# Removing Library/Formula/rogue.rb
# Removing Library/Formula/scummvm.rb
brew update
# Updated Homebrew from 11963f03 to 1693f875.
# (上記の文字列はgitのハッシュ値で,そのときの最新バージョンによって値は異なる.)
# (さらにこの下に,新しく登録されたformulaと,サポート外で削除されたformulaのリストが出るが,長いので割愛.)

まだMacには慣れませんが,ぼちぼちやっていきましょう.