git status、君をいつまでも忘れない……

実は4月から新卒プログラマとして毎日プログラム書いているマコピーです。
今まではそんなにプログラムプログラムしていていなかったので、どうなることかと思いましたが、なんとかなっています。

で、最近多いミスがあります。

git addし忘れるってやつです。
この前の金曜日にそれやらかして、飲んでいるときにJenkins死んでいるぞという電話がかかってきて、
「git addし忘れるとか論外だよねー」と罵られながら(一部脚色しています)、
その場でgit addしてpushし、なんとかJenkinsさんのお怒りを鎮めることができました。

まあgit statusし忘れてなければ、コミットに含めていないファイルが分かるわけで、
今回はそれを怠ったがゆえの失敗です。

git statusを忘れないためにも対策してみます。

gitに色をつけよう

「git status忘れるんだけれどどうすればいい?」と聞くとみんな決まって
「ハァ? 忘れないでしょ」というように軽蔑の目。

この時点で泣きそうなんですけれど、出会うたびにニヤニヤしながら僕をdisってくる
[twitter:@_ishkawa]くんがこの時ばかりは助け舟。
「え、色つけてないの? マコピー情弱だね」
「あ、はい。。。」
というわけでくれたのがこれ。

e
早速適応してみると、こんな感じ

やべぇ、まるわかり! しかも設定意外と簡単なんですね。これで僕も玉虫色のgit生活が送れる!

いや、まて、これはgit statusをして見逃さないようにするための対策。
僕みたいなあんぽんたんは油断してgit statusすら打たないときがあるので、そのための対策をしなければ。

ぜったいgit statusする

git commitしようとするときに、「addしてないファイルがあるけど本当にcommitする?」
みたいな感じのを出せないかな。同時にgit statusもするみたいな。
commit直前に走るスクリプトは.git/hooks/pre-commitに書くっていうのは知っている。
ここに何か書けばいいのかな。

 #!/bin/sh                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                           
 if git status -s | grep '^??' ; then                                                                                                                                                                                                      
     git status                                                                                                                                                                                                                            
     printf "\e[31mExist of untracked files.\e[m\n"                                                                                                                                                                                        
 fi

とまあこんな感じで、git addしていないファイルがあるときはgit statusするようにしてみた。
commitはされるけれど、「おやっ?」と気づくからまだいいかな。
こんなことしても、addしたファイルがないときはstatusが勝手に走るんだけれど、
addしたファイルが1つでもある場合は、statusが走らない。

あと、上記のように(y/n)とか表示させて本当にコミットするの? とやることも考えたんだけれど、
git - can pre-commit hook accept user input?
よく読んでいないけれどなんかできないらしい。
あくまでもpre-commitはワーキングツリーの状態を見て判断するわけで、
そのときにユーザが介入できるわけではないらしい。

そもそもの話

[twitter:@hisaichi5518]くんからの指摘だとgit commit -am 'hogehoge'ってやってたの、
つまり、-aオプションでTrackedなファイルを全部自動でaddしていたのをやめたほうがいいとのこと。
だからこんなことが起こるのか。。。
あとおすすめは git add -p らしいです。
diffみながらマージするみたいにaddできるらしい。試していないけれど今度やってみよう。

というわけでここまで意識すれば覚えるだろうというライフハックでした。