mercurialは、分散リポジトリ型のバージョン管理システムです。
SubversionやCVSは、サーバに単一リポジトリをアクセスするのでオフラインではコミットができません。
mercurialは、リポジトリをローカルに複製するのでオフラインでもローカルリポジトリにコミットできるところがうれしいです。
サーバリポジトリとの同期はpush/pullで実行します。
複数人で開発する場合には、pushまたはpull実行時にコンフリクトを解決が必要な場合があり、このあたりはSubversionやCVSと同じような操作の流れとなります。
同様なものにgitとsvkがありますが、mercurialはスケーラブルで有望そうです。
基本の操作は意外と簡単でRCSの手軽さとSubversionの良いところ+オフラインのコミットと良いこと尽くしです。
ローカルのファイル管理は、RCSから乗り換えよう。
インストール
aptパッケージがあります。
$ sudo apt-get install mercurial
リポジトリの作成
hg initコマンドでカレントディレクトリにリポジトリが作られます。
$ mkdir test $ cd test $ ls -a . .. $ hg init $ ls -a . .. .hg $
基本操作
add/diff/commit/log/statusなど、Subversionでおなじみのコマンドが使えます。
$ echo aaa > first.txt $ hg status ? first.txt $ hg add first.txt $ hg status A first.txt $ hg commit -m "first version" $ echo bbb >> first.txt $ hg status M first.txt $ hg diff diff -r 815d396afb84 first.txt --- a/first.txt Fri Mar 14 22:07:10 2008 +0900 +++ b/first.txt Fri Mar 14 22:07:20 2008 +0900 @@ -1,1 +1,2 @@ aaa aaa +bbb $ hg commit -m "second version" $
リポジトリのコピー
mercurialの最大の特徴である分散リポジトリの作成です。
$ hg clone test test-work 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd test-work $ hg log changeset: 1:dcc1fca99b21 tag: tip user: ksaito date: Fri Mar 14 22:07:42 2008 +0900 summary: second version changeset: 0:815d396afb84 user: ksaito date: Fri Mar 14 22:07:10 2008 +0900 summary: first version $
ローカルリポジトリの修正
hg cloneコマンドでコピーしたリポジトリを修正/コミットしても元のリポジトリは変更されません。
$ echo ccc > first.txt $ hg commit -m "update" $ diff -u first.txt ../test/first.txt --- first.txt 2008-03-14 22:10:40.866033688 +0900 +++ ../test/first.txt 2008-03-14 22:07:20.698592820 +0900 @@ -1 +1,2 @@ -ccc +aaa +bbb $
HTTPでアクセス
hg serveコマンドでブラウザからリポジトリにアクセスできます。デフォルトのポートは、8000で–portオプションでポート指定もできます。
$ hg serve