Saturday, 8 November 2008

Mercurial と格闘中...

http://hgbook.red-bean.com/hgbook.pdf

を読んでたりしますが、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: