gitの状態をターミナルに表示する
仕事ではgitを常用しているのですが、最近自分を含めてpushしていないとかbranchを間違えたとか色々問題が発生しています。
まあ、気をつけていれば良いだけなのですが人間はミスをする生き物なのでターミナルに表示するようにしておこうかと重い今日色々手探りで設定したのでメモしておきます。
環境はBash。Zshな人が最近は増えていますが、いまだにBashがUnix系OSだと標準なので自分はZshにしていません。環境変わって不必要に使い辛く感じるのは嫌ですし。組み込みの仕事だとashが普通だったりするのでそれになれた体ですのでこれで十分です。
OSはMac用に作りましたが、Linuxでも動作しています。
formattedGitDiff() { ret=`git diff origin..HEAD --numstat 2>/dev/null` if [ "${#ret}" = 0 ]; then no_push="" else no_push="(!)" fi echo -e "$no_push" } formattedGitNoPush() { ret=formattedGitDiff if [ "${#ret}" = 0 ]; then git fetch 2>&1 1>/dev/null ret=formattedGitDiff fi $ret } formattedGitBranch() { _branch=`git branch 2>/dev/null | grep '*' | tr -d ' *()'` _no_push=`formattedGitNoPush` test -n "$_branch" && echo -e "<$_branch$_no_push>" } formattedScreenNo() { test -n "$WINDOW" && echo -e ":$WINDOW" } PS1='$(formattedGitBranch)\[\033[01;34m\]\w\[\033[00m\]$(formattedScreenNo)\$ '
ひとまず、
formattedScreenNo()はscreenの番号を表示します。screenを使っていなければ表示しません。得に害は無いはずです。
追記:
formattedGitNoPush()を修正しました。
追記2:
git fetchはすでに変更がある状態ならば呼ばないようにしました。