AiB Toolsのソース管理のために、分散バージョン管理システムMercurialを使ってみることにしました。AiB ToolsはライセンスもMITですしソースを公開していますからオープンソースと言えばオープンソースです。が、SorceForgeやCodePlexなどといったサービスを利用していません。というのも、ユーザ層は日本の重度視覚障害者なので、スクリーンリーダ等でアクセスしやすい上に日本語で使用できるサービスでないとダメだと思っています。残念ながら、そのようなサービスが今のところ見つからないので、ローカルで開発しているわけです。
さて、で、先日VAIO Zを購入したので2台で作業を共有する必要が出てきました。今まではローカルファイルシステムにレポジトリを作ってSubversionで管理していたのですが、2台ともにその構成を取ると非常に不都合です。両方にレポジトリを置いた場合は同期が面倒ですし(思いつく方法はどちらかでsvnserveを起動してsvn syncをかける…)、かといってどちらか一方をマスターにしてしまうと2台に作業環境を用意している意味が無くなります。というわけで、マスターという概念がシステム的に存在しないDVCSを使おうと思いつき、gitとMercurialを比べて、用語が自分により自然な印象を受けるMercurialを採用してみました。もう一つの理由はTortoiseGitとTortoiseHgの比較結果ですが。とりあえず本日修正の機会があったので少し使ってみましたが、同期は次のような手順で行えました。
- デスクトップPCのレポジトリを右クリックしてWeb Serverを起動
- ノートPCからデスクトップPCのIPアドレスとポート番号を指定してpush
- デスクトップPC側でpush結果をmerge
使い始めたばかりなので用語が違うかもしれませんが、ご容赦ください。うーん、思ったより楽でも無いですが、Subversionで同じことをするよりはマシですね。
ただ一つ思ったのは、DVCSが出てきた頃によく話に上がった作業形態の違いよりも、Subversionで言うところのワークスペース・ローカルコピー自体がレポジトリになるという点が一番知っておきたかったです。Subversionのつもりで空フォルダをhg initしてcheckoutしようとしてしまいました。trunk/branches/tagsという管理用フォルダ分け、という考え方も、ありませんしね。それを知らなかったためSubversionのレポジトリのルートをhg convertしてしまい、一からやり直しになりました(Subversionレポジトリのtrunkを指定してhg convertするとタグやブランチもMercurial的に望ましい形で取り込んでくれる)。