Apache Subversion
作者 | CollabNet |
---|---|
開発元 | Apacheソフトウェア財団 |
初版 | 2000年10月20日 (2000-10-20) |
最新版 | 1.11.1 / 2019年1月11日 (2019-01-11) |
リポジトリ | svn.apache.org/viewvc/subversion/trunk/ |
プログラミング言語 | C |
対応OS | クロスプラットフォーム |
サポート状況 | 開発中 |
種別 | バージョン管理ソフトウェア |
ライセンス | Apache License |
公式サイト | subversion.apache.org |
Apache Subversion(アパッチ・サブバージョン; SVN)はプログラムのソースコードなどを管理する集中型バージョン管理システムの一つ。元々は、CollabNetが開発していたが、2009年11月7日にApache Incubatorプロジェクトのひとつとなり、2010年2月17日よりApacheのトッププロジェクトとなった。ライセンスはApache Licenseに準じたものとなっている。
目次
1 概要
2 特徴
2.1 一般的なリポジトリ構成
3 クライアント
4 使用例
5 関連項目
6 外部リンク
概要
歴史的には広く使われているバージョン管理システムの一つに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
関連項目
- CVS
- arch
- バージョン管理システム
- TortoiseSVN
Subversion クライアントの比較 (英語版ウィキペディア)
外部リンク
- 公式ウェブサイト
Subversionによるバージョン管理 - O'Reilly Mediaの本「Version Control with Subversion(svnbook)」をオンラインで読める公式ウェブサイト
Subversionドキュメントのまとめ - 「Subversionによるバージョン管理」の日本語訳(HTML/PDF/HTML Help形式)
|
|