分散バージョン管理システムにだって中央レポジトリが存在する

This entry was posted by on Friday, 11 May, 2007

Matzにっきを読んでいて、やっぱりそういう誤解をする人は多いんだろうな、と思った。

>

中央リポジトリのない完全な分散バージョン管理システムがいまいち使いにくいような気がするのと同様、

これはまったくの誤解だ(でもアリガチな誤解だと思う)。完全な分散バージョン管理システムでも、中央レポジトリってのは存在するケースが大半だろうと思う。

正確にいうと「中央レポジトリと目されるレポジトリ」がある、という話になるだろう。これは「運用でカバー」とかいう話ではなくて、はじめっからそういうことを考えて設計されているのである、分散バージョン管理システムというのは。

じゃあ、分散バージョン管理システムってのは何がいいのかっていうと、手元にレポジトリごと持ってこれるということである。そんでもって、その手元レポジトリでも同じようにバージョン管理ができるっていうことである。

といってもピンとこないかもしれないけれど、ふつうの(RCS/cvs/subversionとかの)バージョン管理システムでこれに対応する概念は、じつはある。ブランチだ。ただ、こうしたシステムでのブランチはいろいろと面倒くさいものだった。

なによりレポジトリの管理者でなければ作成できないし、コストもかかるし、どういうブランチを作るかというのも慎重にならざるをえず、もちろんリモートマシンにブランチを作るなんてこともできない。こういった面倒を取り除き、ブランチを「誰でも作ることができ」「コストは安く」「リモートにブランチを作ることができる」ようにしてみた。これが「リモートのレポジトリ」の意味だ。

僕らはブランチをつくるとき、非常に慎重にポリシーを定めるけれども、べつに小さなことのたびにさくっと作ったり消したりすればいいじゃない、という軽いノリが支配するのが分散バージョン管理の世界である。

そういう「自分用の作業ブランチ」と「みんなで共有する中央レポジトリ」は、システム上の区別はないけれども、ふつうは分けて運用する。たいていのチュートリアルではそのような指導が書かれている(あっ、ふと思ったけどわたしが書いたチュートリアルはそういうことが書いてない気がするな)。そういう意味で、「中央レポジトリ」はあるんである。たとえば http://darcs.haskell.org/ には、いろんな Haskell 関連のプロジェクトの中央レポジトリがズラリと並んでいる。 darcs だって git だって mercurial だって「中央」とか「メイン」とか言われるレポジトリがあって、開発者はそこにアクセスする。

それとも「システム上の区別がない」ことが「使いづらいような気がする」ということなのかな。それには「ぜんぜんそんなことはない」し「むしろ便利だということがある」とだけ書いておきたい(具体例はすぐ思いつかないんだけど)。

Comments are closed.