一歩踏み出してみれば。

最近話題のSCM、Git。代表的な採用例としてはLinuxカーネル*1とか、Ruby on Railsとか。GitHubってサイトと併せて個人開発者の間でも流行りみたい。

今までうちではSubversionを使ってて、Gitが流行ってるらしいって聞いて以前に少し調べたんだけど、次の点が引っかかってて手を出してなかった。

  • リビジョン表記がハッシュ値で見づらい
  • コミット速いって言ったって、そんな頻繁にするものでもないしSVNもせいぜい数秒で返って来るじゃない?
  • 一人で弄るならレポジトリが分散してても別にうれしくないような
  • オフラインでコミットできたって作ってるモノ自体がネットワーク要求するんだからどうしろと

などなど。

なのだけど、Herokuを試してみるときにGitが必要だったので触ったらこれがとってもいい。やっぱり流行ってるだけある。
上の引っかかった点と、実際の感触は次の通り。

リビジョン表記

想像通り分かりづらい。割り切るしかないかな。

コミットが速い

数秒はかかってたのがほぼ瞬時に終わるのは気持ちいい。そうそう頻繁にやるものじゃないのはその通りだけど、待ち時間が消えるとそれだけで効率が上がった気がする。錯覚でも害がないなら気分がいい方がいいね。

分散してても意味がない

運用でSubversionみたいな中央レポジトリ型の使い方も出来るから、問題にならなかった。

コミットだけオフラインでも……

回線状況が悪いときでも、コミットが確実に成功するので少しはストレスが減らせる。


その他に、いいなと思った点はこんな感じ。

マージが楽ちん

SVNで、trunkの開発版からproductionブランチに作った物をマージするときはこんな感じでタイプしてた。

$ cd branches/production
$ svn merge -r前回マージしたリビジョン:今のtrunkの最新リビジョン ../../trunk

前回マージしたリビジョン番号をsvnは覚えててくれない*2から、この後のマージ内容をコミットするときにログに控えてた。
開発版がdevelopmentブランチ、productionに相当するのをmasterにしてるとして、Gitではこうなる。

$ git checkout master
$ git merge development

こうすると、以前のマージからdevelopmentで行われた変更を全部masterにマージしてくれる。前回マージしたとこを覚えてくれているらしい。また、マージ処理自体もコミット同様超速。


まだ使い始めなので分かってないとこもあるけど、これは確かにいいSCMだと思う。気に入ったので順次移行を進めている途中です。
あなたも試してみませんか?

*1:本来これを管理するために開発されたもの

*2:新しいのでは覚えてくれるという話は聞いたことがあります