Apache Subversion

Subversion
作者 CollabNet
開発元 Apacheソフトウェア財団
初版 2000年10月20日 (23年前) (2000-10-20)
最新版
1.14.1 / 2021年2月10日 (3年前) (2021-02-10)[1]
リポジトリ
  • svn.apache.org/repos/asf/subversion/trunk/
ウィキデータを編集
プログラミング
言語
C
対応OS クロスプラットフォーム
サポート状況 開発中
種別 バージョン管理ソフトウェア
ライセンス Apache License
公式サイト subversion.apache.org
テンプレートを表示

Apache Subversion(アパッチ・サブバージョン; SVN)はプログラムのソースコードなどを管理する集中型バージョン管理システムの一つ。元々は、CollabNetが開発していたが、2009年11月7日にApache Incubatorプロジェクトのひとつとなり、2010年2月17日よりApacheのトッププロジェクトとなった。ライセンスはApache Licenseに準じたものとなっている。

概要

歴史的には広く使われているバージョン管理システムの一つにCVSがあった。CVSにはディレクトリの移動の管理やネットワーク対応の点、不可分な更新などの点で難があった。これらCVSの問題点を解決すべく開発されたのがSubversionである。

Subversionは集中型(クライアント・サーバ型)であるが、その後、GitMercurialBazaarなどの分散型のバージョン管理システムが登場するようになった。例えば、Linuxカーネルの管理にはGit、Mozilla Firefoxの管理にはMercurial、MySQLの管理にはBazaarが使われている。

特徴

Subversionの使い方はCVSによく似ている。コマンドラインで使用する際の主要なコマンド名はCVSと一致するように作られているため、クライアントはCVSからの移行がきわめて容易である。

  1. ディレクトリの移動や削除をサポートしている。このため、ファイル名やソースツリーの構造がはっきりと決まらないうちからバージョン管理をすることができる。
  2. バージョン番号(リビジョン番号)はソースツリー全体に対して振られるため、原則としては誰かがソースツリーのどこかのファイルを更新する度に番号が増えてゆく。(CVSではファイル毎にリビジョン番号がつけられている。)
  3. 作業ディレクトリ内に、最後にソースリポジトリと同期をとったときのファイルのコピーを持っているため、改編中のファイルの変更部の確認などがソースリポジトリにアクセスする事無く高速に実行できる[要出典]。また、ファイルの差分送信が効率よく行なわれるため、プアなネットワーク環境で利用したときに快適である。
  4. SSHによるソースリポジトリとの通信を標準でサポートしている。インターネット経由で利用してもセキュリティを容易に保つ事ができる。
  5. WebDAVをバックエンドとして使うことができる。つまり、Apache HTTP ServerなどのWebDAVをサポートするHTTPサーバを経由して、WebDAVプロトコルを用いてSubversionサーバとSubversionクライアントが通信するという形態が使える。

一方で CVS における module, branch, tag といった概念が Subversion では全てサブディレクトリとして設計されているので、これらの扱いは CVS とはまったく違う考え方を要する。

  1. CVS では <モジュール名>/<サブディレクトリ名>/.../<ファイル名> だが、Subversion では <サブディレクトリ名>/.../<ファイル名> となる。下記の2つのコマンドはほぼ同等の処理を行う。
    • cvs -d:some_repository checkout -d aSubdir aModule/aDir/aSubdir
    • svn co some_repository/aModuleDir/aDir/aSubdir
  2. CVS では tag や branch が各ファイル毎に管理されるが、Subversion では「別ディレクトリ/ファイルへのコピー」で管理される。
    • cvs tag aTagName aSubdir
    • svn copy aSubdir aSubdir_aTagName
  3. CVS の merge はタグ名が使えるのに対し、Subversion の merge はリビジョン番号や日付などで指定する。
  4. 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

脚注

[脚注の使い方]
  1. ^ “Apache Subversion News Archives”. 2021年2月12日閲覧。

関連項目

ポータル FLOSS

外部リンク

  • 公式ウェブサイト
  • Subversionによるバージョン管理 - O'Reilly Mediaの本「Version Control with Subversion(svnbook)」をオンラインで読める公式ウェブサイト
  • Subversionドキュメントのまとめ - 「Subversionによるバージョン管理」の日本語訳(HTML/PDF/HTML Help形式)
括弧内の年は正式バージョンのリリース年。†の製品はリリース終了、もしくは更新が長期間途絶えている製品。
ローカルのみ
フリー/オープンソース
プロプライエタリ
  • PVCS(英語版) (1985)
C/S型
フリー/オープンソース
  • CVS (1990)†
  • CVSNT(英語版) (1998)
  • Subversion (2000)
プロプライエタリ
分散型
フリー/オープンソース
  • BitKeeper (1998)†
  • GNU arch (2001)†
  • Darcs(英語版) (2002)
  • DCVS(英語版) (2002)†
  • SVK(英語版) (2003)†
  • Monotone(英語版) (2003)†
  • Codeville(英語版) (2005)†
  • Git (2005)
  • Mercurial (2005)
  • Bazaar (2005)
  • Fossil (2007)
  • Veracity(英語版) (2011)
プロプライエタリ
  • TeamWare(英語版) (1990年代?)†
  • Code Co-op(英語版) (1997)†
  • Plastic SCM(英語版) (2006)
概念
  • カテゴリ
  • 一覧
  • 比較(英語版)
トップレベル
プロジェクト
  • Accumulo(英語版)
  • ActiveMQ
  • Airflow
  • Ambari(英語版)
  • Ant
  • Aries(英語版)
  • Arrow(英語版)
  • Apache HTTP Server
  • APR
  • Avro(英語版)
  • Axis
  • Axis2
  • Beam
  • Bloodhound(英語版)
  • Brooklyn(英語版)
  • Buildr(英語版)
  • Calcite(英語版)
  • Camel(英語版)
  • Cassandra
  • Cayenne(英語版)
  • Chemistry(英語版)
  • CloudStack(英語版)
  • Cocoon
  • Cordova
  • CouchDB
  • cTAKES(英語版)
  • CXF(英語版)
  • Derby
  • Directory(英語版)
  • Drill
  • Druid(英語版)
  • Empire-db(英語版)
  • Felix(英語版)
  • Flex
  • Flink(英語版)
  • Flume(英語版)
  • FreeMaker(英語版)
  • Geronimo
  • Giraph(英語版)
  • Gump(英語版)
  • Hadoop
  • HBase
  • Helix(英語版)
  • Hive
  • Impala(英語版)
  • Jackrabbit(英語版)
  • James
  • Jena(英語版)
  • Jini(英語版)
  • JMeter(英語版)
  • Kafka
  • Kudu(英語版)
  • Kylin(英語版)
  • Lucene
  • Mahout
  • Maven
  • MINA(英語版)
  • mod_perl(英語版)
  • MyFaces(英語版)
  • NetBeans
  • Nutch(英語版)
  • NuttX(英語版)
  • OFBiz(英語版)
  • Oozie(英語版)
  • OpenEJB
  • OpenJPA
  • OpenNLP
  • OpenOffice
  • ORC(英語版)
  • PDFBox(英語版)
  • Parquet(英語版)
  • Phoenix(英語版)
  • POI
  • Pig(英語版)
  • Pinot(英語版)
  • Pivot
  • Qpid(英語版)
  • Roller
  • RocketMQ(英語版)
  • Samza(英語版)
  • ServiceMix(英語版)
  • Shiro(英語版)
  • SINGA(英語版)
  • Sling(英語版)
  • Solr
  • Spark
  • Storm(英語版)
  • SpamAssassin
  • Struts 1
  • Struts 2(英語版)
  • Subversion
  • Apache Superset
  • SystemDS(英語版)
  • Tapestry
  • Thrift
  • Tika(英語版)
  • Tomcat
  • Traffic Server(英語版)
  • Turbine(英語版)
  • UIMA(英語版)
  • Velocity
  • Wicket
  • Xalan
  • Xerces
  • XMLBeans
  • Yetus(英語版)
  • ZooKeeper
ASF logo
Commons
Incubator
  • Apache MXNet(英語版)
  • Apache Taverna(英語版)
その他の
プロジェクト
Attic
  • Abdera(英語版)
  • Apache Apex(英語版)
  • AxKit
  • Beehive(英語版)
  • Bluesky(英語版)
  • iBATIS
  • c++ Standard Library(英語版)
  • Cactus(英語版)
  • Click(英語版)
  • Continuum(英語版)
  • Apache Deltacloud(英語版)
  • Apache Etch(英語版)
  • Excalibur(英語版)
  • Forrest(英語版)
  • Hama(英語版)
  • Harmony
  • HiveMind(英語版)
  • Jakarta
  • Lenya(英語版)
  • Marmotta(英語版)
  • ODE(英語版)
  • Shale
  • Slide(英語版)
  • Shindig
  • Stanbol(英語版)
  • Tuscany(英語版)
  • Wave(英語版)
  • Wink(英語版)
  • XML
ライセンス
  • カテゴリ Category
  • コモンズ Commons
典拠管理データベース ウィキデータを編集
全般
  • VIAF
国立図書館
  • フランス
  • BnF data
  • ドイツ
  • イスラエル
  • アメリカ
その他
  • IdRef