トップ > 興味のあること > コンピュータ > ソフトウェア

Mercurial

http://www.selenic.com/mercurial/wiki/index.cgi/Mercurial
http://www.selenic.com/mercurial/wiki/index.cgi/JapaneseTutorial
http://bitbucket.org/tortoisehg/stable/wiki/Home
http://bitbucket.org/kuy/thg-ja/wiki/Home
http://gihyo.jp/dev/feature/01/mercurial

2008年3月13日

バージョン管理システムの一つ。 CVSやSubversionがサーバー/クライアントシステムなのに対して、 P2Pになっている。 ただ機能的にP2Pだからといって運用までP2Pにすると、 同期の手間が最悪n(n-1)になってイヤになる。 3台でも6回の同期作業が必要になるのだ。 実際にはマスターとなるコンピュータを決めておき、 そこと同期を取る運用が一般的なようだ。

FreeBSDならPortsで、 WindowsやMacOS Xならバイナリパッケージが用意されている。 インストール後は適当なディレクトリでhg initを実行すると、 そこがリポジトリになる。 複数のコンピュータで同期を取るつもりなら、 これはマスターとなるコンピュータで1回だけ実行すればいい。 他のマシンにリポジトリをコピーするときは、 コピーする側からhg clone src dst等としてcloneコマンドを実行する。 確認した範囲では、ソースとしては普通のファイルシステム、 http、sshが使えるようだ。 リポジトリができてしまえば、 後はCVSやSubversionと同じようにaddしてcomiitしてupdateのサイクルである。 ただし、この記録はローカルなリポジトリにしか残らない。

今までのバージョン管理システムにないのが、pushとpullコマンド。 他のリポジトリから差分情報を入手するのがpullで、 送りつけるのがpush。 これで他のリポジトリと同期を取るわけだ。 特にパラメータを与えずhg pushとやると、 最初にcloneしたリポジトリにアクセスに行く。 もちろん、明示的にリポジトリを指定することもできる。 自分が書き込み権限を持っているファイルシステムに直接アクセスしたり、 ssh経由でアクセスする分には問題なかった。 しかし、マスター側でhg serveとして動かしたWebサーバー相手にhttp経由だと、 sslが必要だと言われてpushできなかった。

tagやbranchはまだ試していない。

2009年5月22日

httpベースのpush

mercurial.iniとか.hg/hgrcに

 [web]
 push_ssl = false
 allow_push = *

としてからhg serveを実行すると、 pushも受け付けてくれる模様。

マージソフトの指定

標準のkdiffは漢字コードをちゃんと認識できないようだ。 なので、 mercurial.iniとか.hg/hgrcに

 [merge-tools]
 winmergeu.args = /e /ub /dl other /dr local $other $local $output
 winmergeu.regkey = Software\Thingamahoochie\WinMerge
 winmergeu.regname = Executable
 winmergeu.fixeol = True
 winmergeu.checkchanged = True
 winmergeu.gui = True

と書いてWinMergeを使えるようにした。 はずなんだが、まだテストしていない。

diffツール

Mercurialをインストールしてコマンドプロンプトから使うと、 diffは昔懐かしいテキストベースのものになる。 なので

 [extensions]
 hgext.extdiff =

 [extdiff]
 cmd.wmdiff  = d:\ProgramFiles\WinMerge\WinMergeU.exe
 opts.wmdiff = /r /r /x /ub

として hg wmdiff -r 2 hoge とかやると、 WinMergeで変更点を見られる。 TortoiseHgでは、 古いリビジョンとの差分をとる方法がわからなかった……。

Tortoiseの喧嘩

TortoiseSVNとTortoiseHgを同時に使うと、 なぜかTortoiseHgのリポジトリにしたフォルダ以下の表示が遅くなる。 TortoiseSVNのキャッシュらしきプロセスが一所懸命に動いてるようなのだが、 原因は不明。 まあ、どっちもエクスプローラーの右メニューに組み込まれるから、 なんか喧嘩しているのかも。 とりあえずTortoiseHgをアンインストールして、Mercurialにする。

2009年5月24日

FreeBSDでもMacOS Xでも問題ないのに、 Windows XPだとhg cloneで200MBにちょっと足りないくらいのファイルを転送する時点でこける。 どうやら、実メモリを使い切った時点でout of memoryになるようだ。 何のための仮想メモリなんだか。 そもそもFreeBSDやMacOS Xでは実メモリを使い切らないし。 やっぱり、OSとしてはWindowsってダメダメなのかなあ。

2010年2月2日

久しぶりに使ってみたら、 Windowsが7になったせいなのか、 Mercurialのバージョンが1.4.2になったせいなのか、 200MBを超えるファイルでも問題なくコピーできた。

とはいえ、 2GBを超えるリポジトリを相手にブランチを切ったりマージしたすると、 かなり待たされることがある。