Mercurial

fumi · November 10, 2008

CVSを個人用に使い始めてから8年以上経っているのですが,バイナリの扱いなど,CVSの様々な制約を我慢しながら使ってきました.SubversionやGitなど様々な後継のバージョン管理システムに移行したいと思いつつも,なかなかCVSから脱しきれませんでした.調査をして,Mercurialへなら簡単に移行できそうだったので,ついに今日思い切って個人のレポジトリをMercurialに移行することにしました.色々移行ツールがあるのですが,0.9.5以上のMercurialでは,本体に移行コマンドがあります.

Debian etchにあるMercurialは0.9.1なので,etch-backportsから1.0.1を入れました.aptの設定をすればaptitude install mercurialでインストールできます.

* /etc/apt/sources.list

# backports
deb http://www.backports.org/debian etch-backports main contrib non-free

* /etc/apt/preferences
Package: mercurial
Pin: release a=etch-backports
Pin-Priority: 999

Macは,fink install mercurial-py25でインストールできます.Windows/cygwinにはmercurial 1.0.2がありました.まだ試していませんが,TortoiseCVS/SVNのMercurial版であるTortoiseHgや,Eclipse pluginもあります.

CVSからの移行は,CVSレポジトリはなく,チェックアウトしたディレクトリから行います.この作法に少し戸惑いました.ConvertExtensionに詳しい内容が書いてありますが,とりあえずは$ hg convert [CVS directory] [HG directory]で変換できます.

CVS/SVNのような集中型レポジトリは,ある場所にルートのレポジトリを作り,全ての履歴がそこに集まるようになっています.作業をする場合は,ルートのレポジトリから作業用のディレクトリをチェックアウトします.それに対してMercurialは,完全な分散型です.レポジトリと作業用のディレクトリという概念はありません.cloneによって,clone元とまったく同じものがローカルに作られます.その間に優劣はありません.普段の作業時はローカルにコミットし,必要な変更部分を他のレポジトリに送ることができます.これにより,実験的なコードの開発が楽になったりします.例えば目的毎にcloneを作成して使い分け,いらないものは破棄ということが簡単にできます.もちろん運用上の問題として,マスターのレポジトリを決めておくことはできます.

最初cloneを作る際にはまった問題は,clone元がSSH越しだった場合の書き方です.host名の後ろに/が二つ必要でした.$ hg clone ssh://user@host//path

Tutorial(日本語)を見ながらいじっていますが,今のところhg convertで移行したファイルに問題は見つかっていません.ファイルが多すぎるので全部は確認できないのですが,様々な日本語エンコーディングのファイルやppt,pdfなどが入っていた割には普通に変換できています.

Twitter, Facebook