読者です 読者をやめる 読者になる 読者になる

gitのブランチ名をRPROMPTに表示する

git zsh

ググってみると色々あったのですが、あまりシンプルなのがなかったので調べつつやってみました

git name-rev HEAD --name-only

みたいなものがあるだろうなとは思いつつ、コマンドが多くてなかなか見つかりませんでした。

_set_env_git_current_branch() {
   GIT_CURRENT_BRANCH=$( git name-rev HEAD --name-only ) &> /dev/null
}

_update_rprompt () {
  RPROMPT=$GIT_CURRENT_BRANCH
}

precmd()
{
  _set_env_git_current_branch
  _update_rprompt
}

chpwd()
{
  _set_env_git_current_branch
  _update_rprompt
}

gitのリポジトリ内かどうか判定するいい方法がないかなと思いつつ、git name-revをgitのリポジトリ外でやっても手元の環境だと0.02~0.03s程度なので大して気にならないかなと思ってそのまま実行してしまってます。

追記:

git rev-parse --is-inside-work-treeというのを見つけたのですが、どうもgitのリポジトリ内でないとダメっぽいです

追記:

id:ka-nachtさんによれば、git name-revだとハッシュ値から名前を求めてるので同じハッシュ値を持ったブランチがある場合に間違ったブランチが表示される恐れがあるとのことでしたので、

 
 _set_env_git_current_branch() {
-   GIT_CURRENT_BRANCH=$( git name-rev HEAD --name-only ) &> /dev/null
+  GIT_CURRENT_BRANCH=$( git branch &> /dev/null | grep '^\*' | cut -b 3- )
 }
 
 _show_cmd_on_screen_title() {

のように変更しました。