Apache Subversion
![]() | |
作者 | CollabNet |
---|---|
開発元 | Apacheソフトウェア財団 |
初版 | 2000年10月20日 |
最新版 |
1.14.3
/ 2023年12月28日[1] |
リポジトリ | |
プログラミング 言語 | C |
対応OS | クロスプラットフォーム |
サポート状況 | 開発中 |
種別 | バージョン管理ソフトウェア |
ライセンス | Apache License |
公式サイト |
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ではファイル毎にリビジョン番号がつけられている。)
- 作業ディレクトリ内に、最後にソースリポジトリと同期をとったときのファイルのコピーを持っているため、改編中のファイルの変更部の確認などがソースリポジトリにアクセスする事無く高速に実行できる[要出典]。また、ファイルの差分送信が効率よく行なわれるため、プアなネットワーク環境で利用したときに快適である。
- SSHによるソースリポジトリとの通信を標準でサポートしている。インターネット経由で利用してもセキュリティを容易に保つ事ができる。
- WebDAVをバックエンドとして使うことができる。つまり、Apache HTTP ServerなどのWebDAVをサポートするHTTPサーバを経由して、WebDAVプロトコルを用いてSubversionサーバとSubversionクライアントが通信するという形態が使える。
一方で CVS における module, branch, tag といった概念が Subversion では全てサブディレクトリとして設計されているので、これらの扱いは CVS とはまったく違う考え方を要する。
- CVS では <モジュール名>/<サブディレクトリ名>/.../<ファイル名> だが、Subversion では <サブディレクトリ名>/.../<ファイル名> となる。下記の2つのコマンドはほぼ同等の処理を行う。
- cvs -d:some_repository checkout -d aSubdir aModule/aDir/aSubdir
- svn co some_repository/aModuleDir/aDir/aSubdir
- CVS では tag や branch が各ファイル毎に管理されるが、Subversion では「別ディレクトリ/ファイルへのコピー」で管理される。
- cvs tag aTagName aSubdir
- svn copy aSubdir aSubdir_aTagName
- CVS の merge はタグ名が使えるのに対し、Subversion の merge はリビジョン番号や日付などで指定する。
- Subversion の svn コマンドは同じ表記でリポジトリの直接操作とローカルマシンのワーキングコピーの操作を実現するので注意を要する。
- svn copy aSubdir anotherDir はワーキングコピーでの操作で, 次に svn commit を実行することでリポジトリに反映される。
- svn copy some_repository/.../aSubdir some_repository/.../anotherDir では直接リポジトリが変更される。
一般的なリポジトリ構成
[編集]一般に Subversion ではリポジトリの構成を以下のようにするのがよい、と提案されている。
- <project>/trunk/<subdir>/...
- <project>/branches/<branch>/<subdir>/...
- <project>/tags/<tag>/<subdir>/...
この場合 branch/tag を作成するのは以下のように、コピーするだけでよい。
svn copy some_repository/aProject/trunk some_repository/aProject/branches/aBranchName
クライアント
[編集]クライアントとしては、コマンドラインツールのsvn
の他、以下のものがある。
- Windows - TortoiseSVN(エクスプローラ拡張)
- macOS - SvnX, Versions なお、LeopardからSubversionは標準インストールされており、Subversionサーバも自動起動している。
- Linux - RabbitVCS
- KDE - KDESvn, KSvn
- 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
- Xcode - 2011年3月にリリースされた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
脚注
[編集]- ^ “Apache Subversion News Archives”. 2024年8月16日閲覧。
関連項目
[編集]- CVS
- arch
- バージョン管理システム
- TortoiseSVN
- Subversion クライアントの比較 (英語版ウィキペディア)
外部リンク
[編集]- 公式ウェブサイト
- Subversionによるバージョン管理 - O'Reilly Mediaの本「Version Control with Subversion(svnbook)」をオンラインで読める公式ウェブサイト
- Subversionドキュメントのまとめ - 「Subversionによるバージョン管理」の日本語訳(HTML/PDF/HTML Help形式)