ページ

2014/06/11

Git 2.0 で pull の Fast-Forward を有効にして Homebrew で update したいじゃん?でも今までの git merge --no-ff でマージコミットしてるせいで失敗するじゃん?困るじゃん?

Homebrew の更新の度にマージコミットで中断されてめんどくさかったので
マージコミットしないようにして中断されないようにしました。
Git 2.0 がリリースされて pull が Fast-Forward にできるようになったおかげで
Homebrew の更新を監視する作業がなくなります。やったー。
[Git]GitのpullをFast-Forward onlyにする | DevAchieve で書いたように
git config --global pull.ff only で設定を変更しました。

merge の Fast-Forward は無効で、pull の Fast-Forward は強制にしました。
[merge]
    ff = false
[pull]
    ff = only

これで Homebrew の更新 brew bundle ~/Brewfile の内部の git pull でマージコミットのために
Homebrew の更新が中断されなくなるはずです。

よーし、更新するぞー!と以下のコマンドを実行!
brew bundle ~/Brewfile
fatal: Not possible to fast-forward, aborting.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
Error: Command failed: L2:brew update
はい、明らかに git pull でエラーになりました。
今までマージコミットしていたから Fast-Forward で pull できなくなっているんですね。

Homebrew をアンインストールしてイントールし直すしかないかなぁと思ったけど
Homebrew で入れていたものまでアンインストールされそうです。
参考: いつか見た惑星: Homebrewをアンインストールする

他にも見ていると .git を削除していたのを見つけて解決しました。
参考: Homebrew をアンインストールする方法 - present
Git の問題なので .git を削除するだけでなんとかなりそうだと。

cd `brew --prefix`
rm -rf .git
brew bundle ~/Brewfile
ということで Homebrew の履歴もスッキリして動くようになりました。

Homebrew-cask をインストールしていて Homebrew-cask のコミットもマージコミットしていたら
以下の様なエラーが出ているかもしれません。
fatal: Not possible to fast-forward, aborting.
Error: Failed to update tap: caskroom/cask
fatal: Not possible to fast-forward, aborting.
Error: Failed to update tap: caskroom/versions
以下のコマンドを実行して再インストールしてあげれば履歴が綺麗になって動きます。
brew uninstall brew-cask
brew untap caskroom/cask
brew untap caskroom/versions
brew tap caskroom/cask
brew tap caskroom/versions
brew install brew-cask
tap/untap のくだりはいらないかもしれませんが確認していないので一応記載。

追記

brew uninstall brew-cask
brew untap caskroom/cask
brew untap caskroom/versions
上記のコマンドを実行すると
brew bundle ~/Brewfile を実行した際に Homebrew-cask でインストールしたアプリケーションが
すでにインストールされていてエラーになります。

以下のコマンドで .git だけ削除したほうがいいかもしれません。
rm -rf /usr/local/Library/Taps/caskroom/homebrew-cask/.git
rm -rf /usr/local/Library/Taps/caskroom/homebrew-versions/.git
試してないので誰か同じ境遇の人で試した人がいたら結果を教えて下さい。

追記2

.git だけ削除するのはダメなようです。
あと、最新版の Homebrew で brew bundle が使えなくなったので
仕方ないのでシェルスクリプトにしました。
dotfiles/brew-update at master · wada811/dotfiles