単にgitを新しくしたかっただけなんですが、 Homebrewで入れてみよう、と思ったら 意外と色々やることがあったのでそのまとめ。
gitの更新
Linux環境で使ってるgitが1.8になって
warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'...
と言った注意が出るようになってたので、
$ git config --global push.default simple
でpush.default
を設定。主なオプションはsimple
とmatching
で
matching
の方がこれまでのデフォルトと同じ動きで
simple
の方はupstreamでのブランチ名と現在のブランチ名を比べて
違った場合はpush
しない様にちょっと保守的にする。
まあ、基本、自分用バックアップで使ってる程度なのでどっちでも良いのですが、
新しい初期値と言うことでsimple
に。
.gitconfig
は他のdotfilesと同様いくつかの環境で同期しているので、
他の所でもこの設定で動かすように、、、した所、Macのgitがまだ1.7の古いバージョン
(いくつだったか見てなかった…)で、
この.gitconfig
設定を使うとsimpleというオプションは無い
と言われてしまいました
1。
ということで、gitをアップデートしよう、と思って/usr/bin/git
をアップデート
する方法がぱっとわからないのと
2、Homebrewとかもうちょっと
ちゃんと見てみよう、ってのがあったのでHomebrewで入れて見ることにしました。
Homebrewインストール
Homebrew自体は以前なんとなくインストールしていたのですが、
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
こんなコマンドでさくっとインストール出来ます。
追記: 2014/02/24
raw関連のディレクトリ構造が変わったのと、レポジトリのユーザー名がHomebrew
になったので、現在は
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
が正しいURLになります。(ユーザー名に関してはmxcl
を使ってもリダイレクトされる様になっています。)
追記ここまで
MacPortsの削除
MacPortsも以前なんとなく使ってみたくて入れた記憶はあるのですが、 なんのために入れたかさっぱり覚えてない(上に記録もない…)。
MacPortsが入っている状態でbrew
コマンドを打つとMacPortsとかあって
衝突起こすからそっちは削除しなさい、毎回と注意されて嫌なのでこっちは削除することに。
取り敢えずMacPortsで管理されてるパッケージをメモ。
$ port installed | tee port_installed.txt
The following ports are currently installedu
bzip2 @1.0.6_0 (active)
curl-ca-bundle @7.25.0_0 (active)
db46 @4.6.21_6 (active)
expat @2.1.0_0 (active)
gdbm @1.10_1 (active)
gettext @0.18.1.1_2 (active)
gperf @3.0.4_2 (active)
libedit @20110802-3.0_0 (active)
libiconv @1.14_0 (active)
mercurial @2.1.2_0 (active)
ncurses @5.9_1 (active)
ncursesw @5.8_0 (active)
openssl @1.0.1_2 (active)
perl5 @5.12.3_1+perl5_12 (active)
perl5.12 @5.12.4_0 (active)
python27 @2.7.3_0 (active)
python_select @0.3_1 (active)
sqlite3 @3.7.11_0 (active)
xz @5.0.3_0 (active)
zlib @1.2.6_0 (active)
内容を見て、さらに謎 3。 取り敢えず必要になったら入れればいいやのスタンスで全て削除。
MacPortsのガイド 4に従い
$ sudo port -fp uninstall installed
$ sudo rm -rf \
/opt/local \
/Applications/DarwinPorts \
/Applications/MacPorts \
/Library/LaunchDaemons/org.macports.* \
/Library/Receipts/DarwinPorts*.pkg \
/Library/Receipts/MacPorts*.pkg \
/Library/StartupItems/DarwinPortsStartup \
/Library/Tcl/darwinports1.0 \
/Library/Tcl/macports1.0 \
~/.macports
さらに.bashrc
(から読み込んでるファイル)にあった下の様なPATHの設定を削除。
#for MacPort
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/man:$MANPATH
brew doctor
準備が整ったのでHomebrewを使っていきます。
Homebrewではbrew doctor
というコマンドで環境のチェックをしてくれるので、
$ brew doctor
としたところ 最初はMacPortsを消すまえだったのでMacPortsを消しなさいの文句もありましたが、 削除後にも何やら沢山Warningが出ていて面倒そうでしたが、、せっかくなので全部Fixしてみました。
最初に出たWarningはこんな感じでした。
/usr/localの管理権限の追加
Homebrewではユーザー権限で/usr/local
以下に色々追加していくのですが、
他のアプリを導入する際にprefix
を/usr/local
指定にして
sudo make install
等としていると、root権限で/usr/local
を作るので、
このディレクトリ下は通常のユーザー権限ではいじれなくなります。
doctor
がそう言っていた(!?)こともあるので、これに対しては安易に
$ sudo chown -R $USER /usr/local
で権限をユーザーにあげてしまうことで解決。
Xcodeのアップデート
Xcodeをインストールする際、App Storeからと、直接ダウンロードして入れたものが あったみたいで、まず古いXcodeを消しなさい、的な表示があったので支持に従い
$ sudo /Developer/Library/uninstall-developer-folder
を実行。これには数分かかりました。
Xcodeの再インストール
残ったXcodeも古いのか再インストールするよう促されるので、 一旦削除し(App Cleanerを使用)、 App Storeから再インストール。
さらにコマンドラインツールも古いから新しくしろと言われるので、
AppleのDevelopersページ
からCommand Line Tools (OS X Lion) for Xcode - April 2013
をダウンロードしてきてインストール。
インストール後、一度もXcodeを立ちあげないとライセンスに同意してない、 と注意されるので、取り敢えずGUI版でもコマンドラインツールでも いいから立ち上げてライセンスに同意しておく必要があります。
一回Homebreewをアップデートしてみる
Xcodeの再インストールが住んだので、doctor
で最後に注意される
Homebrewを24時間以内にアップデートしてないよ
の表示を消すため
brew update
を実行。
$ brew update
error: The following untracked working tree files would be overwritten by merge:
Library/Formula/bigloo.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
エラーが出てしまったので、上で言われているbigloo.rb
を一旦退避(その後削除)。
$ mv /usr/local/Library/Formula/bigloo.rb ~/tmp/
再びアップデート
$ brew upate
今度はOK。
ということで再びbrew doctor
をして残りを潰していきます。
gitの状態の回復
Homebrewを大分前にインストールしたままの状態で何かしたのか、
You have uncommited modifications to Homebrew
と言った注意があるので、
これも指示通り
$ cd /usr/local/Library && git stash && git clean -d -f
で解決。
Unlinked kegs
リンク関係がおかしいといったエラーが出るので、これも言われるがまま
$ brew link ghc
今回はghc
だけについて言われたので1つだけ。
Unexpected libralies
/usr/local/lib
にUnexpectedな物がある、と注意される。
みてみるとBoost系が主なんですがこれもどこで入れたか覚えてない…
差し当たりHomebrewでBoostをインストールしてみます。
$ brew install boost
これでインストールされたのは
libboost_atomic-met.dylib
と言った感じのファイルたちで一方
libboost_atomic.dylib
と言った感じの元からあるファイル達はUnexpectedだと注意されます。
そこで、一旦注意されているファイルを退避させることにしました。
$ brew doctor >& doctor.log
で、実際、Unexpectedだと言われているものが必要あるかないかを確認して、 特に今すぐ消して困る、といったものも無かったので
$ mkdir -p ~/Documents/bkup/usr_local_lib/
$ cat doctor.log |grep usr|grep -v Warning|xargs -J % mv % mv % ~/Documents/bkup/usr_local_lib/
で、全てのUnexpectedなファイルを退避。一応しばらくとっておきます。
Broken symlink
これで大体カタが付きましたが、brew doctor
してみると
無効なリンクがあるとのことで、これも言われたとおり
$ brew prune
で解決。
で、もう一度doctorしてみると
$ brew doctor
Your system is ready to brew.
ということで全てFix出来ました。
gitのインストール
やっとのことHomebrewがちゃんと設定出来たので、gitをインストール。
$ brew install git
だけ。これで現時点での安定版の最新であるgit 1.8.3.1が/usr/local/bin
以下にインストールされます。
PATH
の設定がlocal
をさして居なかったり/usr/bin
より後にある場合は
.bashrc
を変更して
export PATH=/usr/local/bin:/usr/bin:$PATH
の様な行を加えます。
simple
は1.7.11
から導入されたらしいのでこれより古いやつが/usr/bin/
にあったと言うこと。Xcodeのコマンドラインツールも途中で入れているので、これによってgitも更新されたらしく、今調べると、/usr/bin/
にあるgitは1.7.12.4
なので、これを使ってもsimple
で文句は言われなくなってます… ↩そんなわけで、最新版に、というわけではありませんが、Xcodeのコマンドラインツールを入れるとこの
/usr/bin/git
も更新されるわけですね。(最初のやつもXcodeのやつかな?覚えてないけど。) ↩ncurses辺りがscreenだかコンパイルするときに必要だったのかな… ↩