概要
会社のPCで個人開発をしているのですが、時々gitのユーザーを間違えて作業してしまうことがありました。
そこで、プロンプトにgitユーザー名を表示するようにして、ミスを未然に防ごうと思います。
※ディレクトリ移動時にgitユーザーが切り替わっても、それに対応したgitユーザー名がプロンプトに表示されます
やり方
# gitプロンプトを読み込む(今回のgitユーザー名とは関係ないです)
# https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
source ~./path_to/git-prompt.sh
# gitのユーザー名を出力する
git_usr_name () {
local repo_info git_usr_name
repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
--is-bare-repository --is-inside-work-tree \
--short HEAD 2>/dev/null)"
git_usr_name=`git config user.name`
if [ -n "$repo_info" ]; then
# gitディレクトリが存在する時
echo "[$git_usr_name]"
fi
}
PS1='%F{green}%n%f: %F{cyan}%~%f %F{red}$(__git_ps1 "(%s)")%f %F{11}$(git_usr_name)%f'"
\$ "
# プロンプトの出力例
pc_usr_name: cuurent_directory (branch_name) [git_usr_name]
開発までの軌跡
ユーザー名が切り替わらない
異なるgitユーザーが設定されているディレクトリに移動しても、プロンプトに表示されているgitユーザー名が切り替わらなかったです。筆者は最初、変数にユーザー名を格納してそれをPS1内で展開してたので、ユーザー名が更新されなかったです。
ユーザー名を読み込むトリガーの発見
何をトリガーでユーザー名を取得すればいいかを探していました。その過程でfswatch
などの指定したファイル変更を監視するライブラリを使ったりもしましたが結局できなったです。git-prompt.sh
にもそのような記述は無く、どこで毎度実行されているかが見つけることができなかったです。結局はPS1内に書けば毎度実行されることがわかりました。
結局%s
がどこから来ているかわからなかった
今回の開発でgit-prompt.sh
を読みまくってたのですが、ブランチ名を表示している%s
がどこで定義されているのかが結局発見できなかったです。わかる方はコメントで教えてください。
PS1とは(GPT-4より)
ZshのPS1は、シェルのプロンプト文字列をカスタマイズする環境変数です。プロンプトは、コマンドを入力する前に表示されるテキストで、ユーザー名、ホスト名、カレントディレクトリなどの情報が含まれています。
参考
プロンプトカスタマイズ https://ryota2357.com/blog/2022/zsh-prompt-custom/
ディレクトリごとに GitHub アカウントを自動的に切り替える設定 https://zenn.dev/taichifukumoto/articles/how-to-use-multiple-github-accounts