Apache Subversion

Apache Subversion（アパッチ・サブバージョン; SVN）はプログラムのソースコードなどを管理する集中型バージョン管理システムの一つ。元々は、CollabNetが開発していたが、2009年11月7日にApache Incubatorプロジェクトのひとつとなり、2010年2月17日よりApacheのトッププロジェクトとなった。ライセンスはApache Licenseに準じたものとなっている。
概要.
歴史的には広く使われているバージョン管理システムの一つにCVSがあった。CVSにはディレクトリの移動の管理やネットワーク対応の点、不可分な更新などの点で難があった。これらCVSの問題点を解決すべく開発されたのがSubversionである。
Subversionは集中型（クライアント・サーバ型）であるが、その後、GitやMercurialやBazaarなどの分散型のバージョン管理システムが登場するようになった。例えば、Linuxカーネルの管理にはGit、Mozilla Firefoxの管理にはMercurial、MySQLの管理にはBazaarが使われている。
特徴.
Subversionの使い方はCVSによく似ている。コマンドラインで使用する際の主要なコマンド名はCVSと一致するように作られているため、クライアントはCVSからの移行がきわめて容易である。
一方で CVS における module, branch, tag といった概念が Subversion では全てサブディレクトリとして設計されているので、これらの扱いは CVS とはまったく違う考え方を要する。
一般的なリポジトリ構成.
一般に Subversion ではリポジトリの構成を以下のようにするのがよい、と提案されている。
この場合 branch/tag を作成するのは以下のように、コピーするだけでよい。
 svn copy some_repository/aProject/trunk some_repository/aProject/branches/aBranchName
クライアント.
クライアントとしては、コマンドラインツールのcodice_1の他、以下のものがある。
使用例.
コマンドラインから使うクライアントcodice_1の使用例
インポート
 $ svn import project_name svn+ssh://dev.example.com/repos/svn/trunk
チェックアウト
 $ svn checkout http://svn.collab.net/repos/svn/trunk
作業コピーの更新
 $ svn update
作業コピーの状態の表示
 $ svn status
変更点の差分を表示
 $ svn diff
ファイル README への変更を破棄して元に戻す
 $ svn revert README
foo を bar に移動
 $ svn move foo bar
コミット
 $ svn commit