ksaitoの日記

日々試したことの覚え書き

mercurial

移転しました。

自動的にリダイレクトします。

mercurialは、分散リポジトリ型のバージョン管理システムです。
SubversionCVSは、サーバに単一リポジトリをアクセスするのでオフラインではコミットができません。
mercurialは、リポジトリをローカルに複製するのでオフラインでもローカルリポジトリにコミットできるところがうれしいです。
サーバリポジトリとの同期はpush/pullで実行します。
複数人で開発する場合には、pushまたはpull実行時にコンフリクトを解決が必要な場合があり、このあたりはSubversionCVSと同じような操作の流れとなります。
同様なものに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