Apache Subversion






















































Subversion

Subversion-logo-cropped.png
作者
CollabNet
開発元
Apacheソフトウェア財団
初版
2000年10月20日(18年前) (2000-10-20
最新版
1.11.1 / 2019年1月11日(29日前) (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からの移行がきわめて容易である。



  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


関連項目







  • CVS

  • arch

  • バージョン管理システム

  • TortoiseSVN


  • Subversion クライアントの比較 (英語版ウィキペディア)



外部リンク



  • 公式ウェブサイト


  • Subversionによるバージョン管理 - O'Reilly Mediaの本「Version Control with Subversion(svnbook)」をオンラインで読める公式ウェブサイト


  • Subversionドキュメントのまとめ - 「Subversionによるバージョン管理」の日本語訳(HTML/PDF/HTML Help形式)






Popular posts from this blog

android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

SQL update select statement

'app-layout' is not a known element: how to share Component with different Modules