Subversion がバージョン管理の問題に提供しようとする機能についての議論 は CVS のデザインをどのように改良したかという観点から話しをすることが しばしば有用です。CVS になじみがないのであればこれらのすべての機能を 理解する必要はありません。そしてバージョン管理についてまったく知らない のであれば、眠くなるだけかも知れません。まず最初に章 2. 基本概念を読んでください。バージョン管理システム一般 についての親切な手引きを用意してあります。
Subversion は以下の機能を提供します:
CVS は個々のファイルの履歴を追うことができるだけですが、 Subversion は時間とともにディレクトリツリー全体の変化も追うことのできる、 「仮想的な」バージョン化ファイルシステムを実装しています。 ファイルと、さらに ディレクトリもバージョン付け します。
CVS はファイルのバージョン化に機能が制限されているので、コピー や名称変更— これはファイルだけではなくディレクトリの内容も 変更する可能性があります— は CVS ではサポートされていません。 さらに CVS では古い履歴を継承しなければ同じ名前の全く新しい ファイル— おそらく全く無関係のファイル—によってすでに バージョン化されているファイルを置き換えることはできません。 Subversion ではファイルとディレクトリの両者に対して追加、削除、 コピー、名称変更をすることができます。そして新規追加されるすべての ファイルは、そこから新しく始まるきれいな履歴を持つことになります。
変更点の集まりは、それ全体がリポジトリに完全に反映されるか、 まったく反映されないかのどちらかです。これにより開発者は 論理的にひとまとまりの変更を作りコミットすることができ、 一部だけがリポジトリに反映されてしまうような問題を回避する ことができます。
ファイルとディレクトリはそれぞれ関連した属性— キーと 値の組のことです— を持つことができます。任意の キー/値の組を生成し保存することができます。属性もファイルの内容と 同じようにバージョン化されます。
Subversion はリポジトリアクセス用の抽象レイアがあり、新しい ネットワークプログラムを簡単に実装できるようになっています。 Subversion は HTTP サーバの拡張モジュールとして組み込むことも できます。こうすると Subversion は信頼性や相互連携性において 非常に有利になりサーバが提供している既存の機能をすぐに利用 できるようになります—認証、認可、データ圧縮、などです。 より簡易なスタンドアロンの Subversion プロセスも利用できます。 このサーバは独自のプロトコルによって SSH を利用したトンネル 通信を簡単に実行できます。
Subversion は、バイナリ差分アルゴリズムを使ってファイルの差分を 表現します。これはテキスト(読むことのできるデータ)にも、バイナリ( 簡単に読むことのできないデータ)に対しても同じ方法で働きます。 どちらのタイプのデータもリポジトリ中に同じ形式で圧縮されて格納され、 差分はネットワーク上どちらの方向にも転送されます。
ブランチとタグを作成するコストはプロジェクトのサイズに比例するわけでは ありません。Subversionはハードリンクとして知られている方法とよく似た方法を使って、 単にプロジェクトをコピーすることでブランチとタグを作ります。そのため ブランチ、タグの作成は非常に短い、一定の時間しかかかりません。
Subversionは歴史的な遺物ではありません。よく設計された APIでできたCの共有ライブラリの集まりとして実装されています。 このことはSubversionの保守をとてもやりやすいものにしますし、 他のアプリケーションや 言語から利用しやすいものにします。