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

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

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

WPF add header to Image with URL pettitions [duplicate]