「分散 VCS」という名前はよくない
Git は RCS っぽい
lifeLOG + REPOsitory: 平等分散リポジトリの見せる夢
ワシもそう思う。Subversion のときはリポジトリを作って http.conf に記述して Apache 起動して…みたいな作業が必要だったけど*1、Git や Mercurial はそういう手間が全然いらない。バージョン管理をしたいと思った瞬間にすぐできちゃう手軽さが、まさしく RCS を彷彿とさせる。分散 VCS 万歳。
あーでも、「分散」VCS という名前はよくないと思う。Git や Mercurial は、リポジトリが「分散」しているわけじゃなくて、単体で完結したリポジトリが相互に連携できるというだけだから、「Distributed」とは違うんじゃないかなあ。少なくともワシは最初のころ、Git は P2P 的な仕組みを持っていて、コミットするとそれが複数のリポジトリに分散されて保存されるのだと勘違いしてた。勘違いを生み出す名前よくない。
ワシ的には、Subversion のほうがよっぽど「分散」的だと思うんだよね。Git や Mercurial と違い、Subversion はリモートリポジトリのすべてをローカルにコピーする必要はない。自分が作業するのに必要な部分だけを取ってこれて、自分が必要としないものはリモートに置いたまま。リポジトリをまるごと clone しなきゃいけない Git や Mercurial と比べると、こっちのほうが Distributed な感じがしない?
リポジトリをまるごと clone しなきゃいけないアーキテクチャは、下請け構造のプロジェクトには使いづらいと思うんだけど、どうですかね。末端の下請けプログラマには自分の作業範囲に関係するソースだけを与え、全体のソースは渡したくない、という要求はごく普通にあると思うんですけど。
他にも、ゲーム開発なら画像データや音楽データやムービーデータをバージョン管理したいと思うけど、それらを全員が自分のローカルマシンに保存しなきゃいけないというのは、どう考えても無駄です。
だから、Git も Mercurial もまだまだ改革できる余地はあると思う。
「我々の間にはチームプレイなどという都合のよい言い訳は存在せん。あるとすればスタンドプレーから生じるチームワークだけだ」
http://www.magi-01.jp/sac/1st/words_aramaki.htm
Git や Mercurial は、まず互いに独立した Stand Alone なリポジトリがあって、それらが必要に応じて連携するというだけだから、まさに『スタンドプレーから生じるチームワーク』そのものだと思う。「分散 VCS」という呼称はやめて「SAC VCS」と呼ぶのはどうか。
*1:必須ではないけど必要ではあった