だいぶ git つかめてきた
と言っても push とか pull とかしたいわけじゃなくて、
svn に突っ込む前のものを手元でだけ管理したい
という特殊な使い方をしているんだけど。というわけで push も pull も branch も merge も使ってません。要は現代的な RCS としてしか使ってない。
ちなみに個人的な好みでは Mercurial の方が好きだったんだけど、
- Mercurial はバージョンと Python のモジュール絡みかなんかで、locale の設定がどうたらウザイことをぬかす輩がいた(要するにデフォルトのまますぐに使い始められないときがあった。たぶん PCC Mac だから。)
- リポジトリに突っ込んでいない大量のファイルがあるディレクトリで使おうとすると圧倒的に git の方が Mercurial より速い
- github を使えないとちょっと恥ずかしい
という理由で git も覚えなきゃ、と思って使っているのが現状である。積極的に使いたいわけでもないし svn との併用を前提に考えているので、git のいちいち操作性が微妙に違うところがヒジョーに気になっていたんだけど、だいぶ慣れてきた。最近便利に使っているのは以下のコマンドかな。
- git commit -a
- デフォルトでは add したもの以外は commit されない。
- git diff [–name-only|–name-status]
- svn のときは svn diff | awk '/^Index/ {print $NF}' ってやってたんだけど、git では必要なかった。
- git log –name-status
- これいい。変更のあったファイルの一覧が取れる。どのタイミングでどのファイルをいじったか分かる。patch の内容までは要らないけどいつ何をいじったか知りたいって場合は多いので。svn でもできるのかもしれないけど、svn の場合は Trac 任せなので細かい機能を知らないんだよな。
- git log -n NUM
- 何個 log を表示するか
- export GIT_PAGER=''
- git は出力が長いときに自分で pager に処理を渡しちゃうんだけど、扱っているファイルのエンコードが Terminal のそれと違う場合とか化けてうざい。そこで pager の設定を空にしてやると pager に渡すタイミングを自分で制御できる。
まだよく分かってなくてちょこちょこ困るのは svn status -v 相当の情報の取り方。要するにどのファイルがいま変更とか追加されていて、それが commit される前の状態なのか、リポジトリに突っ込んでいないファイルを含めて一覧する方法。
個別には git diff –name-status とか git ls-files とか使ってなんとかほしい情報は取れるんだけど、一発でズバッと取れないかなーと思っている。なんでこういうことを感じるかっていうと、リポジトリに突っ込むつもりではいるんだけど、まだ突っ込んでいないファイルを一生懸命いじっていることが svn の場合はちょこちょこあって、それの確認に便利だからだと思う。git で手元のファイルを管理する分には必要になりそうなものは片っ端から突っ込んでいけばいいじゃん、というのがたぶん正解なんだろうなー。
ちなみに今は git メインでは使っていないので svn にコミットして一段落したら .git は消してしまっている。基本的にリポジトリは remote に置いておく方が安心だし、git master は今のところ存在しないので。