2012-05-28 10 views
6

私の質問はタイトルで宣言されたよりも一般的です。リビジョン管理システムはリビジョンをどのように復元しますか?

私は唯一の違いについて、そのソースのバージョン管理情報を格納し知っています。 私が理解しているように、Wikipediaもそうであり、githubもそうです。

しかし、彼らはすべて、特定のリビジョンとファイル全体を表示する機能を持っています。最初のリビジョンから特定のリビジョンに段階的に復元していますか?

もう1つの質問。差異だけを保存している場合、どのようにコンテキスト内でそれらをどのように表示するか(変更前後の小さなテキスト)。

EDIT: githubの店舗全体のスナップショットの代わりに、デルタ

答えて

6

私は唯一の違いについて、そのソースのバージョン管理情報を格納し知っています。質問Git design decision on storing content rather than differencesが示すように

が、これは正確にGitが何ではありません。
LibXDiffライブラリのバイナリデルタを使用して、オブジェクトをdelta形式で格納するのに "packed"形式を使用します。しかし、主にネットワーク転送に使用されます。
Is the git binary diff algorithm (delta storage) standardized?」を参照してください。
これは、フェッチするときにgitが "resolving delta"になっている理由です。私は非常にエリック・シンクの記事Time and Space Tradeoffs in Version Control Storageを読んでお勧めのバージョン管理データを格納するためのさまざまな方法の長所と短所について非常に興味深い読み取りのために

4

ストレージは、バージョン管理 システムにとって最も難しい課題の1つです。すべてのファイルについて、今までに が存在するすべてのバージョンを保存する必要があります。バージョン管理リポジトリの論理サイズは決して に縮小されます。それだけで成長し、成長し続け、すべての古いバージョン は利用可能にする必要があります。

ので、すべてのすべてのバージョンを保存するための最良の方法は何ですか?

3

Wikipedia、悲しいことに、データベースのすべてのリビジョンをテキスト形式のXML(?)形式で保持しています。

wikipedia database schemaを見てみましょう。特に最近の変更とテキストしたがって

、彼らは「生物学」ページの最初のコピーに素晴らしいO(1)ルックアップを持っています。これはウィキペディアのtechnology costが2011-2012年に2010-2011年に$ 8milから$ 12milに吹き飛ばされるという不幸な副作用があります。これは、HDD(と他のすべて)が安くなっているにもかかわらず、より高価ではありません。

すべてのファイルを保持するためのリビジョン管理用です。 Gitはかわいいアプローチをとっています。 Is the git storage model wasteful?を参照してください。

上記の方法と同様に、すべてのファイルを保存します。レポが占有するスペースが一定の制限を超えると、ブルートフォースのリパックが実行されます(時間を要する可能性があります--window = [N]、--depth = [N])。このリパックには、デルタとロスレス圧縮の組み合わせが使用されます(再帰的にデルタしてから、ビットがあればロスレスを適用します)。

SVNのような他のものは単純なデルタ圧縮を使用します。 (あなたが信用してはいけないメモリから)。

脚注: デルタ圧縮は増分変更を格納します。 可逆圧縮は、zip、rarなどとほぼ同じです。

関連する問題