homebrewくんがbrew updateに失敗するとき

死に方1

$ brew update
remote: Counting objects: 4260, done.
remote: Compressing objects: 100% (1380/1380), done.
remote: Total 3668 (delta 2742), reused 3112 (delta 2281)
Receiving objects: 100% (3668/3668), 555.72 KiB | 839 KiB/s, done.
Resolving deltas: 100% (2742/2742), completed with 470 local objects.
From git://github.com/mxcl/homebrew
   76127a3..753dde9  master     -> origin/master
error: unable to unlink old 'README.md' (Permission denied)
Updating 76127a3..753dde9
Error: Failed while executing git pull  origin refs/heads/master:refs/remotes/origin/master

README.mdとかいうどうでも良いファイルのパーミッションでこけていますね。
とりあえず、/usr/local に向かいましょう。この問題が発生した人は、ここでREADME.mdのパーミッションを見てみると、ownerがrootになってると思います。というか/usr/local のパーミッションがrootになっていると思います。
どうでも良いですが今いるディレクトリのパーミッションは一つ下から見なくても

ls -dl

で見れるということを今日知りました。

蘇生法1

README.mdだけパーミッション変えてもラチが明かなかったような気がするので、/usr/local 以下全体のパーミッションをかえます。

sudo chown -R namae /usr/local

とかなんとかでownerを自分に変えます。

死に方2

やったか!?

$ brew update
error: Your local changes to the following files would be overwritten by merge:
	share/man/man1/brew.1
	Library/Homebrew/utils.rb
	Library/Homebrew/test/test_external_deps.rb
	Library/Homebrew/test/test_bucket.rb
	Library/Homebrew/tab.rb
	Library/Homebrew/keg_fix_install_names.rb
	Library/Homebrew/formula_installer.rb
	Library/Homebrew/formula.rb

		(中略)

	Library/Formula/apollo.rb
	Library/Formula/ape.rb
	Library/Aliases/fastcgi
	Library/Aliases/boost-jam
Please move or remove them before you can merge.
Updating 76127a3..753dde9
Aborting
Error: Failed while executing git pull  origin refs/heads/master:refs/remotes/origin/master

やってない(真顔)
あらゆるファイルの変更が取り残されているのでキマってしまっているようです。
git力が低いので変更を退避させるようなコマンドを忘れてしまいました(そもそも覚えていない)。
とりあえずググったら完全に一致なissueが引っかかったので読んでみたところ、そこに答えが書いてありました。

蘇生法2

an easy way to remove the files it's complaining about (the partial update) is


cd /usr/local
git add .
git stash
git reset --hard


and then


brew update


should work.

Error when brew updating, unable to unlink old README.md? · Issue #2906 · Homebrew/legacy-homebrew · GitHub

一旦git add . で全てのファイルをステージしたあとに、git stash でそれをスタックにぶち込んで表面上消し去ったあと、歴史を消し去っている感じですかね。

git stashに関してはPro Gitが解りやすかったです。http://progit.org/book/ja/ch6-3.html
Pro Gitは全体的に解りやすいので僕のように己のgit力に不安を抱えている人は読んだ方が良いです(まだほとんど読んでない)。