pushし忘れないようにプロンプトに表示するようにした
SubversionからGitに乗り替えてからというものコミット漏れ/忘れが激減(Changed but not updatedとかUntracked filesって出るし)したんだけど、今度はpush忘れをするように……。
なんかローカルでコミットした時点で満足しちゃうんだよね。で、帰宅してから同期しようと思ったら何も流れてこなくてうわぁぁぁぁぁ!!て。
コミットしたらすぐpushっていうのはrebaseとかしづらくなっちゃうからちょっとやだし、実はgit-svnで運用してるのでイライラで爆発しちゃいそう。
なので帰宅前に忘れずにpush(dcommit)できればそれでいいんだけど、毎日定時で帰れるほど平和な生活してないのでアラームを仕掛けるという案もいまいち。
で、色々考えた結果、プロンプトにpush済みかそうでないか表示できたらいいかも!と思ったので早速やってみた。
git bash completionについてくる__git_ps1()に付け加える形でこんな風にしてみた。
※2011-07-22 remotesがない場合や初期化直後でHEADがない場合の判定を追加。
__git_not_pushed() { if [[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then head="$(git rev-parse --verify -q HEAD 2>/dev/null)" if [[ $? -eq 0 ]]; then remotes=($(git rev-parse --remotes)) if [[ -n "${remotes[@]}" ]]; then for x in ${remotes[@]} do if [[ "$head" = "$x" ]]; then return 0 fi done echo -n " NOT PUSHED" fi fi fi return 0 } # git bash completion if [ -f ~/git-completion.bash ] ; then source /Users/pasela/git-completion.bash # 前のやつ # PS1='\[\033]0;$MSYSTEM:\w\007 #\033[32m\]\u@\h \[\033[33m\w$(__git_ps1)\033[0m\] #$ ' # __git_not_pushedを追加したやつ PS1='\[\033]0;$MSYSTEM:\w\007 \033[32m\]\u@\h \[\033[33m\w$(__git_ps1)\033[31m\]$(__git_not_pushed)\033[0m\] $ ' fi
これで
pasela@pasela.org ~/repos/foo (master) NOT PUSHED
$
pushしてない時はこんな感じにNOT PUSHEDって出る。
検出方法は見ての通りものすごく適当だけど、とりあえず今の自分には十分。
あまり複雑なことやりすぎるとプロンプトが激重になって発狂しそうだし。
実はシャットダウンを検出して(WindowsならWM_QUERYENDSESSIONとか)そのタイミングで調べてはどうかと考えたこともあったんだけど、ちょっとどうなの?って感じがしたのでやめた。