2013年8月27日火曜日

git と mercurial の「分散バージョン管理」の解釈の違い

出稼ぎ先に常駐してる、同じく出稼ぎ組の知人が、これまた間の悪いことにgit派なのですが、彼と話していて、git と mercurialの「分散バージョン管理」に対する解釈の違いがようやく腑に落ちました。

  • gitにはリポジトリの一部 clone があるらしい。※マジで??
    • 中央リポジトリがあるんだから、一部クローンでいいじゃん!という主張
    • あれ?
    •  「分散バージョン管理」の話だったような?
  • mercurialは、ブランチ単位の clone しかない。
    • 但し、任意のサーバ機能を内蔵している。
      • コマンドライン hg serve -p 8080でサラッと起動して、簡易リポジトリサーバが稼働する。
      • これを使って、作業者同士が直接チェンジセットを交換して、マージも可能
これらを踏まえての小生の解釈はこうです。

git は、複数の「分散リポジトリサーバ」を渡り歩いて摘み食いをするためのツール。


mercurial は、自分自身が「分散リポジトリサーバ」である。


早い話は、前者はブラウザ、後者はサーバであると言えましょう。使い勝手が大きく違うのは当たり前の話です。

とはいえ、リポジトリ全体をコピーせざるをえないmercurialでは、バイナリを多く扱うような案件では、サーバというよりは、作業者各自のディスク容量が問題になりそうです。新規cloneも非常に時間が掛かりますし。

この点を踏まえて、mercurl 2.0では、巨大ファイルの遅延cloneを実装してるらしい。
http://mercurial.selenic.com/wiki/LargefilesExtension

残念ながら小生は使ったことないです。リポジトリの互換性が無くなるので、cloneし直すしかないらしい。

総合的にいえば、やはり仕事として使うならmercurial、という確信を持ちました。gitの一部cloneには、「ボク自分の仕事しかやりません。見ません」というスタンスが見え隠れしてるからです。オイオイお前さんは社会人で、コレは仕事だろ。と。