カテゴリー
Linux

Bash のプロンプトに表示する Git のリポジトリ状態 (__git_ps1) をほぼ満足する状態にまでカスタマイズできた♪

Mac の .bash_profile に書いた Git のプロンプトカスタマイズ部分完成形

# プロンプトに各種追加情報を表示
source /usr/local/etc/bash_completion.d/git-prompt.sh
if type __git_ps1 > /dev/null 2>&1 ; then
  GIT_PS1_SHOWDIRTYSTATE=true
  GIT_PS1_SHOWSTASHSTATE=true
  GIT_PS1_SHOWUNTRACKEDFILES=true
  GIT_PS1_SHOWUPSTREAM="auto"
  GIT_PS1_SHOWCOLORHINTS=true
  PROMPT_COMMAND='\
    __git_ps1 \
    "\[\e[1;32m\]\u@\h\[\e[m\]:\[\e[1;34m\]\W\[\e[m\]" \
    "\$ " \
  '
fi

各オプションの内容

git/git-prompt.sh at master · git/git に記されている各オプションの内容をまとめます。

GIT_PS1_SHOWDIRTYSTATE

  • 空以外の値を設定にすることで有効になる。
  • unstaged な変更がある時に (*) を、 staged な変更がある時に (+) を、プロンプトのブランチ名の右に表示する。

GIT_PS1_SHOWSTASHSTATE

  • 空以外の値を設定にすることで有効になる。
  • stashed がある時に ‘$’ を、プロンプトのブランチ名の右に表示する。

GIT_PS1_SHOWUNTRACKEDFILES

  • 空以外の値を設定にすることで有効になる。
  • untracked files がある時に ‘%’ を、プロンプトのブランチ名の右に表示する。

GIT_PS1_SHOWUPSTREAM

  • HEAD とその upstream の間の差分をみたい時に、 GIT_PS1_SHOWUPSTREAM="auto" と設定する。
  • "<" は upstream よりも遅れている状態であることを示す。
  • ">" は upstream よりも進んでいる状態であることを示す。
  • "<>" は upstream から分岐した状態であることを示す。
  • "=" は upstream と一致している状態であることを示す。
  • 半角スペース区切りでさらに設定することができる。

GIT_PS1_SHOWCOLORHINTS

  • 空以外の値を設定にすることで有効になる。
  • 現在の状態を色付けして表示する。
  • __git_ps1 を PROMPT_COMMAND または precmd で使用した場合のみ有効となる。

PROMPT_COMMAND とは?

不満

PROMPT_COMMAND で __git_ps1 を指定するのは良いとして、この引数で Git のリポジトリ状態の前後のプロンプトを指定する点が不満です。

なぜなら、 export PS1 の内容と合わせなければならなくなるからです。 __git_ps1 はプロンプトに何をどのような装飾で表示するかのみを定義したいです。

そして、 PS1 はプロンプトの表示を定義したいのです。

今回の投稿の設定では、プロンプトの表示も、 __git_ps1 に定義しています。

おわりに

git/git-prompt.sh at master · git/git を読んでいましたら、 GIT_PS1_SHOWDIRTYSTATE 以外にもさまざまなオプションが用意されていることを知りました。

せっかくなので取り込んでみようと手を出してみましたら、 PROMPT_COMMAND と言うものの存在を知り、それについてもさらに調べて、、、と広がってしまいました。

プロンプトのカスタマイズが目的でしたので、それを第一にして、周辺の気になることも少し調べました。

最後に、参考ページです、ありがとうございました!

以上です。

コメントを残す