1

何かを理解しようとする。サーバーに ad:\svn\repository を作成しました。フォルダーをコミットしましたが、d:\svn\repository に戻ってもそれらが表示されません。それらはすべてデータベースにありますか?すべてのリポジトリはそのメイン フォルダに移動し、svn はそれらを追跡しますか? 2 つのプロジェクトがある場合はどうなりますか?

ありがとうございました。

4

1 に答える 1

4

Subversion は論理フォルダーをサーバー上の同じ構造に保存しません。「データベース」内のデルタのファイル内のすべてを追跡します。このデータベースは Subversion に固有です。そのリポジトリにコミットされたものはすべてそのファイルに入ります。サーバー上で論理構造を見つけることはできません。そのように機能しないだけです。

FSFSから

2004 年半ばに、データベースをまったく使用しない 2 番目のタイプのリポジトリ ストレージ システムが誕生しました。FSFS リポジトリはリビジョン ツリーを 1 つのファイルに格納するため、リポジトリのリビジョンはすべて、番号付きファイルでいっぱいの 1 つのサブディレクトリで見つけることができます。トランザクションは別のサブディレクトリに作成されます。完了すると、単一のトランザクション ファイルが作成され、リビジョン ディレクトリに移動されるため、コミットがアトミックであることが保証されます。また、リビジョン ファイルは永続的で不変であるため、Berkeley DB リポジトリと同様に、リポジトリも「ホット」な状態でバックアップできます。

リビジョン ファイル形式は、リビジョンのディレクトリ構造、ファイルの内容、および他のリビジョン ツリー内のファイルに対するデルタを表します。Berkeley DB データベースとは異なり、このストレージ形式はさまざまなオペレーティング システム間で移植可能であり、CPU アーキテクチャの影響を受けません。ジャーナリング ファイルや共有メモリ ファイルが使用されていないため、ネットワーク ファイルシステムを介してリポジトリに安全にアクセスし、読み取り専用環境で調べることができます。データベースのオーバーヘッドがないということは、リポジトリ全体のサイズが少し小さくなることも意味します。

FSFS にもさまざまなパフォーマンス特性があります。膨大な数のファイルを含むディレクトリをコミットする場合、FSFS は O(N) アルゴリズムを使用してエントリを追加しますが、Berkeley DB は O(N^2) アルゴリズムを使用してディレクトリ全体を書き換えます。一方、FSFS は、ファイルの最新バージョンを以前のバージョンに対するデルタとして書き込みます。つまり、最新のツリーをチェックアウトするのは、Berkeley DB HEAD リビジョンに格納されているフルテキストを取得するよりも少し遅くなります。FSFS では、コミットを終了する際の遅延も長くなり、極端な場合、応答を待っているときにクライアントがタイムアウトする可能性があります。

ただし、最も重要な違いは、何か問題が発生した場合に FSFS を「くさび」にすることができないことです。Berkeley DB データベースを使用するプロセスでパーミッションの問題が発生したり、突然クラッシュしたりすると、データベースは管理者が復旧するまで使用できなくなります。FSFS リポジトリを使用するプロセスで同じシナリオが発生した場合、リポジトリはまったく影響を受けません。最悪の場合、一部のトランザクション データが取り残されます。

于 2010-03-24T18:41:44.063 に答える