Subversion

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
Subversion

開発元 CollabNet, Inc.
最新版 1.5.2 / 2008年8月30日
対応OS クロスプラットフォーム
種別 バージョン管理ソフトウェア
ライセンス Subversion License
公式サイト http://subversion.tigris.org/
  

Subversion(サブバージョン)はプログラムのソースコードなどを管理するバージョン管理システムの一つ。

目次

概要

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

古くからオープンソースソフトウェアの開発においてはCVSが多く使われていたが、最近ではSubversionを利用するオープンソースプロジェクトが多い。

特徴

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の他、以下の物がある。

Eclipseではプラグインをインストールすることでプロジェクトの管理をSubversionで行えるようになる。

その他、subversion.tigris.orgのクライアント一覧で見ることができる。

使用例

コマンドラインから使うクライアント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

関連項目

外部リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net