Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

git worktree list を少しだけ使いやすく

はじめに

みんな大好き git-worktree。中でも list は使用頻度の高いコマンドですが、リスト後に cd することが多いのでこのような関数を利用しています。

こんなの

zsh 用です。 .zshrc あたりに書いておきます。関数名は gitw としてますが好きに変えてください。

function gitw {
  lines=( ${(@f)"$(git worktree list)"} )
  for (( i=1; i<=$#lines; i+=1 )); do
    echo -n "$i: "
    echo $lines[$i]
  done
  echo -n "? "
  read n
  expr $n + 1 > /dev/null 2>&1 # numeric check
  if [[ $? -lt 2 && 1 -le $n && $n -le $#lines ]]; then;
    cd `echo $lines[$n] | awk '{ print $1 }'`
  fi
}

使い方

git worktree list だと、

tagi@ubuntu-vm ~/tmux % git worktree list
/home/tagi/tmux             68c2fc68 [master]
/home/tagi/tmux.wt/3.0-rc   68c2fc68 [3.0-rc]
/home/tagi/tmux.wt/develop  68c2fc68 [develop]
tagi@ubuntu-vm ~/tmux %

こんな感じでリストするだけですが gitw だと、

tagi@ubuntu-vm ~/tmux % gitw
1: /home/tagi/tmux             68c2fc68 [master]
2: /home/tagi/tmux.wt/3.0-rc   68c2fc68 [3.0-rc]
3: /home/tagi/tmux.wt/develop  68c2fc68 [develop]
? 

このように番号とともにリストします。移動したければ番号を入力して移動、移動したくなければそのまま Enter で抜けます。

tagi@ubuntu-vm ~/tmux % gitw
1: /home/tagi/tmux             68c2fc68 [master]
2: /home/tagi/tmux.wt/3.0-rc   68c2fc68 [3.0-rc]
3: /home/tagi/tmux.wt/develop  68c2fc68 [develop]
? 2
tagi@ubuntu-vm ~/tmux.wt/3.0-rc
 %

地味に便利かなと。