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

気に入ったこと

ブランチが気軽に作れる

ほんともうブランチが気軽に作れて気軽に消せるのがよい。
SubversionMercurialみたいにログが干渉し合ったりしないから、お試し気分で作っても汚したりしない。
本当はどっかに残っててGC回収待ちなのかもしれないけど、まだ内部的なことは理解しきれてないw
感覚的にはミニcloneって感じ。

rebaseとfast-forward mergeが気持ちいい

分岐して作業してるにも関わらず、あたかも最初から順番に作業してたかのように歴史を線形に保てるのがいい。

黒歴史を編集できる

rebase -iとかcommit --amendであとから過去の成果を変更できるので「修正漏れ」とか「デバッグ用のコードが残っていた」みたいなださい歴史を残さなくて済む。

commit -vでdiffが表示できる

-vをつけてコミットするとメッセージの編集時にコミット内容のdiffが表示されるので、どんな内容をコミットしようとしているのかわかる。
Subversionのときはsvn-diff.vimっていうプラグインでちょうど同じことができたんだけど、こいつはgit本体の機能なのでプラグインとか入れなくてもいいし、そもそもvimでなくてもいいので素晴らしい。

カラフルで楽しい

gitの入門ページみたいなのを見るとお約束のようにcolor.ui = autoとか書いてあるんだけど、おかげでgitの出力がカラフルで大変見やすい。

気に入らないこと

Windowsで使うのが大変

たぶん、本格的に使おうとすると現時点ではCygwin版を使うしかないと思う。
まずCygwinの設定が面倒くさいし(ほら、ついつい.bashrcいじったりzsh入れちゃったり.screenrcいじっちゃったりするでしょ?)、Cygwin内とWindows側でパスの扱いが違う(cygdrive)ので、cygpath使ってうまく変換してやったりしないとWindows側のツールがうまく起動できないとか、とにかく面倒くさいことが多すぎる。

resetとcheckoutが覚えられない

こいつらはコマンドの意味が多すぎていつまでたっても覚えられないw

リポジトリ壊しそうになる

うっかり変なresetしちゃったり、bareじゃないリポジトリにpushしてみたりして/(^o^)\ってなる。