BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ラージファイル拡張を備えた Mercurial 2.0 がリリース

ラージファイル拡張を備えた Mercurial 2.0 がリリース

原文(投稿日:2011/11/03)へのリンク

SelenicMercurial 2.0 をリリースした。この DVCS ツールとしては 今年3回目のアップグレード になる。

今回のリリースでは ラージファイル拡張 (Largefile Extension) が導入された。これは基本的に分散型バージョン管理システムである Mercurial に対して,例外的に集中型データストレージを導入するものだ。Mercurial の備えている Revlog ストレージ機構は,サイズの大きなバイナリファイルの保管にはあまり適していない。ラージファイル拡張はこの種のファイルを,必要時ベースでダウンロードすることが可能な集中型サーバロケーションを実現する。

DVCS にサイズの大きなバイナリファイルを格納する場合,更新頻度が高いときに問題が発生することがある。バイナリファイルの格納に差分圧縮 (変更された部分のみ格納する,などの方法で) を使用したとしても,リポジトリのサイズがすぐに膨らんでしまうのだ。さらにこのようなリソースがリポジトリ履歴の一部である場合,サイズの切り詰めがコンテントハッシュに影響を及ぼし,結果的にレポジトリのバージョンにも影響する。

使用するバージョンシステムもよるが,サイズの大きなリソースを (定期的にアクセスしない) 別ブランチに格納するかどうかによって,クローンリポジトリのサイズが変わってくる可能性がある (ただしソースには影響しない)。Mercurial のラージファイル拡張では,サイズの大きなファイル処理に別ルートを用意して,クローンリポジトリ内のラージファイルへの (実質的な) シンボリックリンクを提供する。

現在チェックアウトされているバージョンに必要のないラージファイルは,クローンあるいはフェッチ/プッシュ操作時にはダウンロードされない。しかしラージファイルへのリンクを1つ以上含むバージョンがチェックアウトされた場合には,その内容をサーバからダウンロードするために,独立した別のコネクションが実行される。これは明らかに,リポジトリ内の特定のバージョンに関しては,チェックアウト時にサーバとの接続が必要である,ということを意味している。しかしローカルの Mercurial クローンがすでにダウンロードしたラージファイルをキャッシュに保持することによって,ダウンロード済みであるものについてはそちらを使用することができる。

hg add コマンドには --large という新しいオプションが追加された。ファイルがラージファイルであること (代替ルートで,必要時にキャッシュを併用する集中型ストレージを使用する) を指定する。あるいは自動的にラージファイルとして扱う判定条件を,固定サイズ (デフォルトでは 10Mb 以上),あるいは名称パターン (*.zip のように) で設定することも可能だ。今回の新フォーマットを利用するためには,hg lfconvert コマンドでリポジトリフォーマットを更新しなければならないことに注意が必要だ。ラージファイルの状態を追跡する dirstate コマンドには,Mercurial 2.0 では現在 2Gb までという制限がある。リリース以降,将来的にはフィックスされると思われるが,こちらも注意する必要がある。

Mercurial 2.0 では,チェリーピッキング (選択的マージ) のMercurial 版実装である graft コマンドが追加された。必要な変更部分をマージロジックを使用して決定した後,マージノードを生成せずに,それらを部分単位で適用する。他のチェリーピッキング実装と同じように,過去にコピー済みの変更が重複して適用されることはない。

この記事に星をつける

おすすめ度
スタイル

BT