河野真治 @ 琉球大学情報工学です。

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

を読んでたりしますが、200ページもあるよ... 

一見、CVSに似ているんだけど、全然別物ですね。checkout とい
う概念がなくて、clone  でまるごとコピーする。cloneされた repository
は、お互いに同等で、push/pull を使って変更を投げて、それをmerge/
commit する。なので、working directoryってのは「気分」であ
って、repository と同じらしい。

SVNをいじった時の「こいつ、ゴミだ〜」と言う感じは、CVSを単
純に焼直して、遅くしただけだからなんだよな。svn ls とかが最
低だったし。それに比べて、Mercurial は、まともだと思う。18
ページあたりに、Subversion/git/CVS との比較があるんだけど、
「うんうん、その通り」という感じです。

実装も良くできてて、append only の圧縮されたデータ構造とか、
定期的にfull snapsh otが入るとか、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がな
い」とだめらしい。ht tpの設定とか、どうすれば良いのか微妙に
わかってません。

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するんだってさ。

 ────────────────────────────────

svn にはtagがないけど、hg にはあるのはうれしい。tag っての
はとっちらかるものなので、name space上に広がっちゃうのはう
れしくないんだよ。 

あと、今やっているProjectのそのdirectoryにhg init出来るのも
いい。昔のmkdir RCS; ci -l * とかを思い出します。 

svnがどうして、あんな不合理な仕組みになったのか理解出来ない
よ... SVNって、design decisionの悪さが全体を引っ張っている
と思う。ある意味で、Unix 的じゃない。binary databaseと、そ
れを処理するCプログラムって自体が、もはやUnix 的ではないよ。
C++という選択肢を避けたいのは理解出来るけど。 

Mercurialは、Unixのファイル構造とかを利用して構築しているし、
実装はPythonだったりするので、hg server とかが簡単に書ける
んだよな。

本は一通り読みましたが、bisect とかは面白かったが、Branch, 
Mercurial Queue は良くわからないな。

 ────────────────────────────────

Eclipse のMercurial plug-inが、どうもうまく動いてくれない。
Clone repository 自体だめ。"clone operation failed" では、
わかりませんです。log を見ると、hg の実行そのものをしくって
いるっぽいが... 

Nov 11 05:59:53 org.eclipse.eclipse[0]: !MESSAGE Cannot bind to an undefined command: plug-in='org.eclipse.tm.terminal', id='org.eclipse.tm.terminal.command1'

これか? Target Management Terminal っていうplug-in? まぁ、
それは入れりゃいいとして。

Nov 11 06:10:41 org.eclipse.eclipse[0]: java.lang.reflect.InvocationTargetException
Nov 11 06:10:41 org.eclipse.eclipse[0]:      at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:403)
Nov 11 06:10:41 org.eclipse.eclipse[0]:      at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:934)
Nov 11 06:10:41 org.eclipse.eclipse[0]:      at com.vectrace.MercurialEclipse.wizards.CloneRepoWizard.performFinish(CloneRepoWizard.java:120)

あぁ、もう良いよ。

と、思ったら hg を full path で指定したら動いた。そういう問
題かよ。

って、いったい、どのタイミングで hg のfull pathを指定するか
が不明。いったん、設定をpathすると properties の中に埋もれ
てしまうらしい。

最初に、hg debuginstall とかを実行するらしく、それがしくじ
っているとダメという感じ? 


---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科