Gitとプロンプト変数PS1とbash_completionと

開発環境がまだMacになってきたので、プロンプトとかbash_completionとか、だんだん分かってきたbashの細かいとこをちゃんと設定してみた。

成果

見やすいプロンプト。特にgitの状態
myuser@host ~/dev/foo (bar-branch)
$ git rebase -i HEAD^^
myuser@host ~/dev/foo (bar-branch|REBASE-i)
$

ここじゃ再現できないけど色も付いてます。

gitコマンドの補完(gitに限った機能じゃないけど
$ git c[tab][tab]
checkout           cherry-pick        clean              commit             credential-cache
cherry             citool             clone              config             credential-store

設定方法

$ sudo port install bash-completion

まずMacPortsbash-completionを入れる。

$ vim .profile #.bash_profile や .bashrcでも環境に合わせて
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

これが読み込まれた時点で、/opt/local/etc/bash_completion.d/*にある色んなコマンドの補完が出来るようになる。MacPortsportとか。

$ sudo port install git-core +svn +bash_completion

variantsでbash_completionを指定する。svnはお好みで。
この時点で/opt/local/etc/bash_completion.d/gitが出来て、前述のbash_completionが読み込んでくれるので、gitコマンドの補完が働きます。

gitのwork tree内でブランチ情報を出す
$ vim .profile #.bash_profile や .bashrcでも環境に合わせて
# bash_completion.d/git
if [ -f $BASH_COMPLETION_DIR/git ]; then
    export PS1='\[\033[01;32m\]\u@\h\[\033[01;33m\] \w$(__git_ps1) \n\[\033[01;34m\]\$\[\033[00m\] '
else
    export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
fi

これを読み込むと、プロンプトが最初に書いた様な感じに変わります。この設定は、Cygwinのデフォルト+どこかで見つけたgitのブランチを表示する設定です。Cygwinに設定した時メモしなかったせいで、どこで見つけたのか分からなくなっちゃいました。

Cygwinに設定した際に参考にしたエントリーを見つけました。参考にというか、そっくりそのままだった。Gitブランチ名を__git_ps1でbashプロンプトに表示 - 130単位

すでにgit-coreが入ってる場合 #1

variantsを変えてインストールしようにも、MacPortsはインストール済みをインストールする事が出来ない。git-coreなんて消そうとすると依存関係で色々消えてしまうということで、現実的じゃなくめんどくさい。

$ sudo ln -s /opt/local/share/doc/git-core/contrib/completion/git-completion.bash /opt/local/etc/bash_completion.d/git

補完用スクリプト自体はあるので、シンボリックリンクを作れば+bash_completionを指定出来てなくても補完もブランチ情報も出来ます。

すでにgit-coreが入ってる場合 #2

$ sudo port deactivate curl @7.19.4_0
$ sudo port install curl +ssl
$ sudo port uninstall curl @7.19.4_0

富士山は世界遺産

deactivateすればvariants違いを入れることが可能らしい。自分はこれをやってないので、7.19.4_0をdeactivateして、+sslな7.19.4_0を入れた場合、アンインストールして両方消えたりしないのかなとか、ちょっと疑問はあるけど。
他にも依存関係とかおかしくならないのかとか、心配になる点はあるので、何かあってもなんとか出来るならやってみてもいいかも。

環境

Mac Mac OS X 10.7.4(Lion)
git-core @1.7.10.4_0
bash-completion @1.3_6