Gitを使い始めて1ヶ月が経った
もうそろそろSubversionだけじゃいかんだろうと思ってGitを使い始めて1ヶ月が経った。
試しにいじってみることは何度かあったんだけど、本格的に運用を始めたのは今回が初めて。仕事とプライベートで使ってる。
とはいえいきなりリポジトリをGitに変えられるわけもないので、git-svnで連携するスタイルで使っている。
むしろgit-svnでしか使ったことがないので、普通のpush/pullとかやったことないという……w
今の自分の使い方
これが正しいのかどうかわからないけど、今はこんな感じのワークフローになっている。
git svn cloneは既に終わってるとして、
とりあえずリモートの更新内容をローカルに取り込む。
$ git svn rebase
feature1ブランチを作って作業する。
$ git checkout -b feature1 ……feature1の作業
他メンバーとの連携の都合上、feature2を先に仕上げる必要がでてきたのでfeature2ブランチをmasterから作る。
$ git checkout -b feature2 master ……feature2の作業
起点の指定を忘れると現在のブランチが起点になるので、チキンな時は一度masterに戻ってからcheckout -bしたりするw
feature2が出来上がったのでmasterに戻ってマージする。
マージし終わったらfeature2ブランチは消す。
$ git checkout master $ git merge feature2 $ git branch -d feature2
リモートの更新内容を取り込む。ぶつかったらマージする。
そしてリモートに送りつける。この場合相手がSubversionなのでpushではなくてSubversionに対するコミットだね。
$ git svn rebase $ git svn dcommit
でfeature2の用事が済んだのでfeature1に戻って作業を再開する。
$ git checkout feature1 ……feature1の作業
しかし、色々試行錯誤した結果使い物にならなくなったのでfeature1を破棄するw
$ git checkout master $ git branch -D feature1
とまあ、こんな感じかなぁ。
ブランチの成果をmasterにマージするときはsvn rebaseしてからmergeするのがいいのかどっちがいいのかよくわからない。
けど、先にsvn rebaseするとブランチが-Dじゃないと消せなくなるのでなんか気持ち悪い。というか怖い。
Subversion側のブランチやタグはまだ扱ったことがない。ローカルで練習しないと壊しそうw
気に入ったこと
ブランチが気軽に作れる
ほんともうブランチが気軽に作れて気軽に消せるのがよい。
SubversionやMercurialみたいにログが干渉し合ったりしないから、お試し気分で作っても汚したりしない。
本当はどっかに残っててGC回収待ちなのかもしれないけど、まだ内部的なことは理解しきれてないw
感覚的にはミニcloneって感じ。
rebaseとfast-forward mergeが気持ちいい
分岐して作業してるにも関わらず、あたかも最初から順番に作業してたかのように歴史を線形に保てるのがいい。
commit -vでdiffが表示できる
-vをつけてコミットするとメッセージの編集時にコミット内容のdiffが表示されるので、どんな内容をコミットしようとしているのかわかる。
Subversionのときはsvn-diff.vimっていうプラグインでちょうど同じことができたんだけど、こいつはgit本体の機能なのでプラグインとか入れなくてもいいし、そもそもvimでなくてもいいので素晴らしい。
カラフルで楽しい
gitの入門ページみたいなのを見るとお約束のようにcolor.ui = autoとか書いてあるんだけど、おかげでgitの出力がカラフルで大変見やすい。