を読んでたりしますが、200ページもあるよ... 取り敢えず60ページまで読みました。
一見、CVSに似ているんだけど、全然別物ですね。checkout という概念がなくて、clone でまるごとコピーする。cloneされた repository は、お互いに同等で、push/pull を使って変更を投げて、それをmerge/commit する。なので、working directoryってのは「気分」であって、repository と同じらしい。
SVNをいじった時の「こいつ、ゴミだ〜」と言う感じは、CVSを単純に焼直して、遅くしただけだからなんだよな。svn ls とかが最低だったし。それに比べて、Mercurial は、まともだと思う。18ページあたりに、Subversion/git/CVS との比較があるんだけど、「うんうん、その通り」という感じです。
実装も良くできてて、append only の圧縮されたデータ構造とか、定期的にfull snapshotが入るとか、clone では、まず、hard linkして、変更があった時だけwriteするとか書いてある。SVNより速いってのは、そのせいか。
SVNだと、CVSから移る動機が足りないんだよね。ディレクトリの削除が出来ないとか、バイナリファイルがどうこうとかだけでは、遅さを我慢する理由にならないです。でも、Mercurial だったら、そこここにある localなCVSを駆逐できる。
さすがに distributed というだけあって、ノートPCとかで作業するには最適なようです。
ノートPCでは、細かく commit して、
共有 repository には、working version だけ push/commit する
なんてことも可能らしい。
CVS/SVNには、実際にどう使うかと言うドキュメントはあんまりないんだけど、hgbook は、そのあたりに結構分量が割いてある。(まだ、読んでないけど...)
────────────────────────────────
scp で、httpでアクセス出来るところに置いても「そこに.hgがない」とだめらしい。httpの設定とか、どうすれば良いのか微妙にわかってません。
CVSから、hg convert で変更する時には「新しくcvs checkoutして」やらないと、
cvs server: cvs [checkout aborted]: Absolute module reference invalid:
http://www.selenic.com/mercurial/wiki/index.cgi/ConvertExtension
みたいなerrorが出ることがあるらしい。
cloneでない repositoryからpullして、update しようとすると、
abort: untracked file in working directory differs from file
http://opensolaris.org/os/community/on/flag-days/pages/2008071502/
とか言われる。なんか、そのファイルを消してからupdateするんだってさ。
No comments:
Post a Comment