2012-02-08 7 views
2

200mbのファイルがあります。現時点では、rsyncを使用して、開発者が変更されたときにrsyncを転送します。水銀のリポジトリの一部としてインクルードすると、mercurialはrsyncのようなdiffを転送するだけですか、変更されたときにフルファイルを転送しますか?水銀はフルファイルを転送するの?それとも差分のみを転送するのですか?

+0

ファイルテキストまたはバイナリですか? –

+0

大きなバイナリファイル – HyderA

答えて

5

Mercurialは、hg pullのときにのみデルタを転送します。それ以外の場合はのバージョン管理がまったく機能しません。

hg pullとすると、ローカルクローンにすべてのチェンジセットがありません。各チェンジセットにはデルタのみが含まれています。デルタは小さいか大きいかもしれませんが、rsyncで見つかったデルタに満足すれば、Mercurialにも満足しているはずです。

バイナリファイルについて:Mercurialはではありません。はコミット時に "text"と "binary"ファイルを区別します。それらはすべて同じように扱われ、すべての場合にデルタ圧縮が使用されます。これを混乱させる原因は、編集ごとにファイルが大幅に変更された場合、デルタ圧縮は役に立たないということです。デルタはファイル自体と同じ大きさになります。その場合、Mercurialは実際にはファイルの圧縮スナップショットを保存します。

+1

+1 'hg incoming'もチェンジセット(またはこの場合はデルタ)を完全にダウンロードすることにも注意してください。 –

+0

私が知る限り、Mercurialはバイナリのデルタを格納したり転送したりしません。だから私はこの答えがこの場合には正しいとは思わない。 –

+0

@LaurensHolst: "バイナリ"ファイルの場合でも、デルタを作成します。私はこれを明確にするために答えを更新しました。 –

2

大きなファイルを処理するためにいくつかのMercurial拡張が作成されています。これらは、ファイル自体をバージョン管理するのではなく、チェックサムをバージョン管理することによって動作します。

Mercurial 2.0以降を使用している場合は、デフォルトでLargeFilesExtensionが含まれています。ドキュメントは、拡張子がどのように動作するかを説明します。

ラージファイルの拡張子は クローンについて、過剰な帯域幅を必要とせずにMercurialのでは大規模な、非圧縮性 バイナリファイルを追跡することが可能と引っ張ります。 largefilesとして追加されたファイルは、Mercurialによって直接 で追跡されません。それらのリビジョンはチェックサムで識別され、 とMercurialはこれらのチェックサムを追跡します。この方法で、 リポジトリをクローンしたりチェンジセットを取得したりすると、古いバージョンの大きなファイル( )は必要なくなり、 を現在のバージョンに更新するのに必要なものだけがダウンロードされます。これにより、ディスク容量と、 の帯域幅が節約されます。

その他の拡張機能もあります。ここにはさらに詳しい情報があります:Handling Large Files

+0

これは大きなバイナリファイル用です。大規模なテキストファイルの場合は、diffを参照するのが有効な場合があります。 –

+0

+1:largefilesの拡張はここで面白いです。必要のない大きなファイルのバージョンはダウンロードしないでください。したがって、リビジョン10からリビジョン50にプルアップして更新する場合は、リビジョン50の大きなファイルのみをダウンロードします。一方、Adamが指摘するように、デルタ圧縮は実行されませんので、*完全バージョンのそのファイルはリビジョン50で見えます。これは、10から50までのすべてのデルタをダウンロードするよりも少なくても終了する可能性があります。 –

+0

拡張機能の便利な拡張機能は、rsyncのような方法を使ってアップデート大きなファイルの –

関連する問題