zshでGitのリモートリポジトリのホスト名を表示する
zshではvcs_info
を使用して作業中のリポジトリの情報を表示することができる。「zsh vcs_info」でググるといろいろと出てくるが、私は以下の記事をベースに設定を行って、少しずつアップデートしている。
zsh の vcs_info に独自の処理を追加して stash 数とか push していない件数とか何でも表示する(記事は4年ほど前のものだが、zsh自体がそんなにアップデートしているわけでもないので、今でも十分通用する)
最近になってgithub.com
とgitlab.com
のどちらも使用するようにしたので、リモートリポジトリを間違えないようにホスト名を表示できるように修正した。
リモートリポジトリのホスト名を取得する
git ls-remote --get-url
でリモートリポジトリのURLを取得できる。このURLは.git/config
に記載されているものが表示されるようになっている。たぶんgit remote add origin REMOTE_REPOSITORY
で設定したものと同じになるはず。リモートが複数設定されている場合にどうなるか未確認だが自分のユースケースではそれはあまりないので、気にせず使っている。
git@github.com:kawaken/dotfiles
という構成になっている場合が多いので、:
と@
で分割してホスト名に該当しそうな箇所を拾っている。
hostname=$(git ls-remote --get-url | cut -d: -f1 | cut -d@ -f2)
プロンプトに表示する
自分の場合はhook_com[branch]
の中に混ぜ込むようにしている。
https://github.com/kawaken/dotfiles/blob/master/zsh/vcs_info#L54
- echo "%f${arrow}%F{cyan}${remote}%f${(j:/:)gitstatus}" + echo "%f${arrow}%F{cyan}${remote}(${hostname})%f${(j:/:)gitstatus}"
最終的にはこんな感じで表示される。
出力結果が長い
ホスト名が出るのは良いが、ちょっと長いので短くしたい。ここで以前書いたホスト名を短くする手法を使う。SSH_CONFIGを使用してgitのリポジトリURLを短縮する
# gh = git@github.com git remote rm origin git remote add origin gh:kawaken/dotfiles git branch -u origin/master
シンプルな表示になった。