7

私の質問は、タイトルで宣言されているよりも一般的です。

ソース バージョン管理では、相違点に関する情報のみが保存されることを知っています。私が理解しているように、ウィキペディアもそうですし、githubもそうです。

ただし、それらはすべて、特定のリビジョンでファイル全体を表示する機能を備えています。最初のリビジョンから特定のリビジョンまで段階的に復元しますか?

そしてもう一つ質問です。違いのみを保存する場合、コンテキスト (変更前後の小さなテキスト) を使用して UI に表示する方法。

編集: github はデルタではなくスナップショット全体を保存します

4

3 に答える 3

6

ソースバージョン管理は違いに関する情報のみを保存することを私は知っています。

違いではなくコンテンツの保存に関するGitの設計上の決定が示すように、これはGitが行うこととは異なります
ただし、LibXDiffライブラリのバイナリデルタを使用して、オブジェクトをデルタ化された形式で格納するための「パック」形式があります。しかし、それは主にネットワーク転送に使用されます。
gitbinarydiffアルゴリズム(デルタストレージ)は標準化されていますか?」を参照してください。そのため、フェッチするときに
gitが「デルタを解決」します。

于 2012-05-28T10:45:48.053 に答える
4

バージョン管理データを保存するさまざまな方法の長所と短所に関する非常に興味深い読み物として、Eric Sink の記事Time and Space Tradeoffs in Version Control Storage を読むことを強くお勧めします。

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

では、すべてのバージョンを保存する最善の方法は何でしょうか?

于 2012-05-29T22:23:29.390 に答える
3

残念なことに、ウィキペディアは、データベース内のすべてのリビジョンを何らかの形式の XML(?) としてテキストとして保持しています。

ウィキペディアのデータベース スキーマを見てください。特に最近の変更とテキスト。

したがって、「生物学」ページの最初のコピーへの素晴らしい O(1) ルックアップがあります。これには、ウィキペディアの技術コストが 2010 年から 2011 年の 800 万ドルから 2011 年から 2012 年には 1200 万ドルに膨れ上がるという不幸な副作用があります。これは、HDD (およびその他すべて) が高価ではなく、安価になっているにもかかわらずです。

すべてのファイルを保持するリビジョン管理についてはこれで終わりです。Git はキュートなアプローチを採用しています。Git ストレージ モデルは無駄ですか?を参照してください。.

上記の方法と同様に、すべてのファイルを保存します。レポが占めるスペースが特定の制限を超えると、ブルート フォース リパックが実行されます (再試行の強さを設定するオプションがあります - --window=[N], --depth=[N] )。これには数時間かかる場合があります。上記のリパックには、デルタ圧縮とロスレス圧縮の組み合わせを使用します(再帰的にデルタを使用し、次に、持っているビットにロスレスを適用します)。

SVN のような他のものは、単純なデルタ圧縮を使用します。(信頼してはならない記憶から)。

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

于 2012-06-12T19:01:49.657 に答える