読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

SVNユーザーがGitを使い始めて感じていることをまとめてみる

Git

こんなつもりじゃなかった

いやぁ、にわかにGitの記事が盛り上がりましたね。


最初に表明しておくと、私自身DVCSを業務内で(こっそり)使い始めて日が浅く、というかほんとにGitポケットリファレンスには超お世話になっているので、そのブランチモデルを参考にしながら、かつgit-svnと戯れながらやっている中で感じたことのメモです。もう一回言います。メモです。

Gitポケットリファレンス

Gitポケットリファレンス


なお、git-svnの運用の話と一緒に記事を書こうとしていたんですが、序盤部分を書いて力尽きたので一旦公開してしまいます。

なんでGitをやろうと思ったの?

なんで、Git(というか分散バージョン管理)をしたいんでしょ?私がやってみたいと思った答えは至ってシンプルです。

流行ってたから。

もっというと、周りのすごい人が雪崩をうってDVCSに向かっていたから。遅ればせながらという感じで勉強し始めました。なんて不純!!

・・・とはいえ、アレです。そんな私ですが、いまは完全にハマっています。Gitはプログラマーとしてハマるものだと思います。

なんでGitにハマったのか、考えてみた。

バージョン管理は誰のためにあるのかというと、・・・みんなのためにあります。「みんな」をざくっと2つに分けると、よくあるパターンは開発者と管理者です。あるいはもう少し一般的に言うと手元のコードを良く知っている人とよくは知らないけれど使うよっという人です。そこには責務と権限が異なる空間が広がっています。

f:id:posaunehm:20120907005820j:plain

あなたがプログラマなら、責務分割したいですよね?カプセル化したいですよね?

そこで分散管理です。Gitです。Mercurialです。Bazaarです。プログラマとして、そのコードの開発者として好きなだけコミットして、自分の都合がいいところでブランチ切って、気に入ったタイミングでマージしてしまいましょう。そこは基本的には自分ルールでOK。ローカルでのみ自動コミットや自動コミット、マージ前の自動テスト、どうぞご自由に。その空間はあなたのものです。

f:id:posaunehm:20120907005326j:plain

@irofさんの指摘通り、分散バージョン管理最大の利点はコミットが軽いことです。もっと言うとブランチも軽いです。マージもだいたい軽くて、pushとpullはそこそこに重い。そんなイメージ。要は自分のルールが及ぶ空間での操作は非常に軽いんですね。

それらをまとめて、プロジェクトへpushしましょう。そのときだけ、それが外部から見えることを意識しないといけません。マージをまとめるのか、rebaseで歴史改変するのか、そもそも自分のルールを外に合わせておいてそのまま出せるようにするのか、そこのプロセスはわかりません(そしてそれがいい!)。最後にpushするときに、ちゃんとプロジェクトの約束事を守っていればそれでいいのです。

ちゃんと意識すれば手元の作業は注意すれば周りから完全に見えなくすることができます。周りから見れば定期的にプロダクトが生産されているだけなのに、開発者はそれぞれ自分のペース・スタイルにバージョン管理を合わせることができます。分散バージョン管理はそういうふうにできている、とおもいます。そのハマった感覚を味わうことが出来れば、あとは分散バージョン管理のリズムは自然に出てくるのかなーと。

まとめ

分散バージョン管理システムは、コードに対する責務によって役割を切り替えられる・分割できるってのが、プログラマに非常に向いているんだろ―な、というのが今僕が抱いている感想です。他にもっとプラクティカルにありがたい場面はあるんだけれど、それは別エントリで。