Mercurialのバンドルファイルを扱う #mercurialjp

このエントリは Mercuiral Advent Calendar 2012 の9日目です。

Mercurialで扱えるバイナリ形式の差分ファイル、バンドルファイルについて簡単に説明したいと思います。

バンドルファイルを作る

ローカルリポジトリにあるリビジョンをバンドルファイルにする場合は hg bundle コマンドを利用します。

# リモートリポジトリに存在しないリビジョンをバンドルファイルにする
hg bundle <出力ファイル>
# REVISIONより新しいリビジョンをバンドルファイルにする
hg bundle --base <REVISION> <出力ファイル>

リモートリポジトリにあるリビジョンをバンドルファイルにする場合は hg incoming を利用します。*1

# リモートリポジトリにのみ存在するリビジョンをバンドルファイルにする
hg incoming --bundle <出力ファイル>

バックアップバンドル

hg strip で履歴を削除したり hg rebase など履歴改変を行うとバックアップバンドルが作成されます。 このバックアップバンドルは、リポジトリ内の次の場所に作成されます。

<リポジトリルート>/.hg/strip-backup

バックアップバンドルの中身を調べる

バンドルファイルはバイナリファイルなので、less やエディタで開いても中身が読めません。 hg incoming の引数にはリポジトリのURL以外にバンドルファイルを指定出来ます。これを使って中身を調べることができます。

# コミットログを見る
hg incoming <バンドルファイル>
# 変更内容を見る
hg incoming --patch <バンドルファイル>

バンドルファイルを取り込む。

次のどちらかのコマンドで取り込めます。

hg unbundle <バンドルファイル>
hg pull <バンドルファイル>

間違ったリビジョンを hg strip してしまったときなどに利用して下さい。

*1:SCMBC in Tokyo 3 でこのコマンドでバンドルファイルの中身を閲覧できると、間違った情報を伝えてしまいました。申し訳ありません。