Apache Subversion

Apache Subversion(アパッチ・サブバージョン、SVN)は、ソフトウェア開発におけるソースコードなどの変更履歴を管理するための集中型バージョン管理システムです。元々はCollabNetによって開発されましたが、2009年Apache Incubatorプロジェクトに移行し、2010年にはApacheのトッププロジェクトとなりました。ライセンスApache Licenseに準拠しています。

概要



Subversionは、以前広く使われていたCVS(Concurrent Versions System)の課題を解決するために開発されました。CVSには、ディレクトリ移動の管理やネットワーク対応、不可分な更新などの点で問題がありました。Subversionはこれらの問題を克服し、より効率的で信頼性の高いバージョン管理を提供することを目指しました。

Subversionは集中型(クライアント・サーバ型)のシステムですが、その後、Git、Mercurial、Bazaarなどの分散型バージョン管理システムが登場しました。これらの分散型システムは、Linuxカーネルの管理にGitMozilla Firefoxの管理にMercurial、MySQLの管理にBazaarが利用されています。

特徴



Subversionの使い方はCVSによく似ており、コマンドラインでの主要なコマンド名はCVSと一致するように設計されています。これにより、CVSからの移行が容易になっています。

Subversionの主な特徴は以下の通りです。

ディレクトリの移動と削除のサポート: ファイル名やソースツリーの構造が未確定な段階でも、バージョン管理を開始できます。
ソースツリー全体に対するリビジョン番号: ソースツリー全体に対して一意のリビジョン番号が付与され、更新の度に番号が増加します。CVSのようにファイル毎にリビジョン番号が管理されるわけではありません。
高速な差分確認: 作業ディレクトリ内に最後にリポジトリと同期したファイルのコピーがあるため、リポジトリにアクセスせずに高速に変更部を確認できます。また、差分送信が効率的なため、ネットワーク環境が悪い場合でも快適に利用できます。
SSHによる通信サポート: 標準でSSHによる通信をサポートしており、インターネット経由での利用時にもセキュリティを確保できます。
WebDAVサポート: WebDAVをバックエンドとして使用でき、Apache HTTP ServerなどのWebDAVをサポートするHTTPサーバ経由での通信が可能です。
CVSとの違い: CVSにおけるmodule, branch, tagの概念は、Subversionではサブディレクトリとして扱われます。CVSとSubversionではこれらの概念に対するアプローチが異なります。

CVSでは `<モジュール名>/<サブディレクトリ名>/.../<ファイル名>` のように記述しますが、Subversionでは `<サブディレクトリ名>/.../<ファイル名>` のように記述します。例えば、以下のコマンドはほぼ同等の処理を行います。


cvs -d:some_repository checkout -d aSubdir aModule/aDir/aSubdir
svn co some_repository/aModuleDir/aDir/aSubdir


CVSではタグやブランチがファイル毎に管理されるのに対し、Subversionでは「別ディレクトリ/ファイルへのコピー」として管理されます。


cvs tag aTagName aSubdir
svn copy aSubdir aSubdir_aTagName


CVSではmergeにタグ名を使用できますが、Subversionではリビジョン番号や日付で指定します。

また、Subversionの `svn` コマンドは、リポジトリの直接操作とローカルマシンのワーキングコピーの操作を同じ表記で実現するため、注意が必要です。例えば、 `svn copy aSubdir anotherDir` はワーキングコピーでの操作で、 `svn commit` を実行することでリポジトリに反映されます。一方、 `svn copy some_repository/.../aSubdir some_repository/.../anotherDir` は直接リポジトリを変更します。

一般的なリポジトリ構成



Subversionでは、リポジトリの構成を以下のようにするのが一般的です。


/trunk//...
/branches///...
/tags///...


ブランチやタグを作成する場合、コピー操作のみで完了します。


svn copy some_repository/aProject/trunk some_repository/aProject/branches/aBranchName


クライアント



Subversionには、コマンドラインツールの `svn` の他に、様々なクライアントが存在します。

Windows: TortoiseSVN (エクスプローラ拡張)
macOS: SvnX, Versions(macOS Leopard以降はSubversionが標準インストールされ、Subversionサーバも自動起動します)
Linux: RabbitVCS
KDE: KDESvn, KSvn
GNOME: (GNOMEデスクトップ環境向け)
クロスプラットフォーム: RapidSVN, pysvn WorkBench, eSvn, SmartSVN, QSvn
Webアプリ: FlexySvn, Trac, ViewVC
Java: SVNKit, NetBeans, sventon
Eclipse: Subclipse, Subversive
Visual Studio: AnkhSVN, VisualSVN
IntelliJ IDEA: 標準搭載またはTMate
Dreamweaver: 標準搭載またはSubWeaver
Code::Blocks: (Code::Blocks IDE向け)
Xcode: Xcode4以降、gitとSubversionが標準でサポート


使用例



コマンドラインクライアント `svn` の使用例を以下に示します。

インポート:


$ 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


関連項目



CVS
arch
バージョン管理システム
TortoiseSVN
Subversion クライアントの比較 (英語版ウィキペディア)

外部リンク



公式ウェブサイト
Subversionによるバージョン管理 - O'Reilly Mediaの本「Version Control with Subversion(svnbook)」をオンラインで読める公式ウェブサイト
Subversionドキュメントのまとめ - 「Subversionによるバージョン管理」の日本語訳(HTML/PDF/HTML Help形式)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。