Posted by at

Subversion

概要

このページは、バージョン管理システムのSubversionWindows環境で使用する場合の手順などをサンプルを用いて解説しています。

Subversionとは

SubversionCVSの利用形態を引き継ぎつつ、問題点を克服した新しいバージョン管理システムです。

  • リポジトリにリビジョンがつく
  • コミットがアトミック
  • ファイルの移動
  • ディレクトリの作成・削除
  • ネットワーク対応
  • 言語バインディング
UNIX USER 2003 8: Subversionで管理せよ (draft)より引用

上記の項目の用語や意味は、引用元のコラムや、トランクやブランチなどのバージョン管理用語の意味が参考になります。

このメモでの注意点

  • プロジェクトの名前を表すものとして、hogeなどを使用しています。ただし、xyzzyはエディタ*1です。
  • Apache2など導入しない場合、コマンドラインでhttp://localhost/となっている部分をfile://localhost/c:/などに置き換えて実行してください。file:で始まるURIのドライブ名の指定方法は以下を参考にしてください。
file:///c:/svn/hoge
file://localhost/c:/svn/hoge
file://c:/svn/hoge
file:/c:/svn/hoge
file:///C|/svn/hoge
  • 標準的なWindows環境の場合、SubversionconfigファイルはC:\Documents and Settings\ユーザ名\Application Data\Subversion以下にあります。
    • このSubversionフォルダが存在しない場合、なにかコマンドを実行すれば新規生成されるようです。例えば、Subversionをインストールした後で、コマンドプロンプトなどからsvn helpを実行すれば、Subversionフォルダが生成され、その下に、configserversREADME.txtなどのファイルも作成されます。

使い方

コマンドプロンプトなどから使う場合は、CVSとほとんど同じ感覚で使用することができます。

mkdir c:\svn
svnadmin create c:\svn\hoge
svn mkdir file://localhost/c:/svn/hoge/trunk -m "trunk作成"
svn import e:\hogehoge file://localhost/c:/svn/hoge/trunk -m "コメント"

以下のように入力すると、簡単なヘルプが表示されます。

svnのサブコマンド一覧など
> svn help

コミット(サブコマンド)のヘルプ
> svn help commit

svnadminのサブコマンド一覧など
> svnadmin help

リポジトリ

どのようなディレクトリ構造のリポジトリにするかは、Subversion自身のリポジトリが参考になります。通常は以下のような3つのディレクトリを作っておくのがお勧めのようです。

  • trunk
  • tags
  • branches

リポジトリの作成

以下、例としてプロジェクト名がHogeのリポジトリを作ってみます。

まず、SVNParentPathとしてc:\svn(これはただのディレクトリ)を作成し、この下にhogeプロジェクトなどのリポジトリを作成、初期化します。

mkdir c:\svn
svnadmin create c:\svn\hoge

hogeリポジトリの下に、trunktagsなどのディレクトリを作成します。

svn mkdir file://localhost/c:/svn/hoge/trunk    -m "trunkの作成"
svn mkdir file://localhost/c:/svn/hoge/tags     -m "tagsの作成"
svn mkdir file://localhost/c:/svn/hoge/branches -m "branchesの作成"

例えばe:\hoge 以下に置かれていたソースディレクトリなどを、リポジトリにインポートします。

mkdir e:\hoge\src
svn import e:\hoge file://localhost/c:/svn/hoge/trunk -m "srcをimport"

生成したリポジトリのtrunk以下の内容を、任意のディレクトリ(c:\dev\hoge)以下にチェックアウトします。ディレクトリは相対パスで指定可、存在しない場合は自動生成、省略した場合は指定したリポジトリの末尾(以下の場合trunk)のディレクトリが生成されます。

svn co file://localhost/c:/svn/hoge/trunk c:\dev\hoge

チェックアウトしたディレクトリ以下のファイルを修正してコミット(チェックイン)するなどして、開発を進めていきます。

各ディレクトリの役割

Apache2を導入して(Apache2(Windows版)でネットワーク対応)、作成したリポジトリをブラウザで見てみると、以下のようになります。

repos.png

赤線を引いたところは、Apachehttpd.confファイルで設定したSVNParentPath(c:\svn)のエイリアスです。なんでもいいのですが、svnrepossvnreposなどが多いようです。

青線の部分はプロジェクト名をディレクトリに、またその下に trunktagsbranchesを作っています。このサンプルプロジェクトでは、それぞれ以下のようになっています。

ディレクトリHogeプロジェクトでの内容
trunksrcディレクトリ、build.xmlbulid.propertiesなどが入っています。
tagshoge-0.1.0hoge-0.5.1といったディレクトリが入っています。これらは、リリースしたリビジョンでのtrunkディレクトリのコピーになっています。
branchesブランチをいれますが、小さいプロジェクトなので今のところ空です。

タグ付け

例えばバージョン0.8.0をリリースした場合、以下の要領でタグ付けをしておきます(コマンドプロンプトで入力する場合は、^は使用せず、一行で入力してください)。

svn copy http://localhost/svn/hoge/trunk ^
         http://localhost/svn/hoge/tags/hoge-0.8.0 ^
         -m "hoge-0.8.0としてリリース"

Subversionでのcopyは、ファイルそのものをコピーしている訳ではないので、ディスク容量を浪費しません。

リポジトリのバックアップ

svnadmin dumpで、データベースにあるリポジトリをダンプファイルとしてバックアップすることができます。

svnadmin dump c:\svn\hoge > c:\temp\hoge.dump

逆にダンプファイルをデータベースにロードするには、svnadmin loadを使用します。

svnadmin create c:\svn\hoge2
svnadmin load c:\svn\hoge2 < c:\temp\hoge.dump

Subversionのバージョンアップでリポジトリスキーマが更新された場合、リポジトリのアップグレードが必要になる*2ことがあります。これらの場合、まず古いバージョンの"svnadmin.exe"を使ってダンプファイルを作成し、新しい"svnadmin.exe"で、リポジトリの新規作成、ダンプファイルのロードを行います。古いバージョンのWindows用バイナリなどは、Windows Archiveにあります。

svnadmin dump c:\svn\hoge > c:\temp\hoge.dump
ren c:\svn\hoge hoge_old
(svnadminを新しいものに変更)
svnadmin create c:\svn\hoge
svnadmin load c:\svn\hoge < c:\temp\hoge.dump

ログエディタの設定

ログエディタの設定方法についてメモしています。

無視パターン

bakファイル(*.bak*.BAK)などをステータス表示(svn status)などで無視するよう設定します。

ログの修正

コミットログの誤字脱字などを修正します。上書きされてしまうので十分注意して実行してください。

ネットワーク対応

ネットワーク越しにSubversionを使えるようにします。

  • Apache2(Windows版)でネットワーク対応
    • Apache HTTP Serverを導入してSubversionをネットワーク越しで使用できるようにします。うまくいかない場合は、C:\Program Files\Subversion\W32notes.txtなどを参照してください。

サードパーティー製ツール

  • ViewVC(←ViewCVSから名前が変更されました)
    • ViewVCを導入することで、Subversionのリポジトリをブラウザからより詳しく閲覧することができます。
  • WinMerge
    • コマンドライン版のdiffの代わりに、GUIで差分を表示できるWinMergeを使用してみます。
  • eSvn
    • Subversion用のGUIクライアントです。

参考リンク

Subversion関係のリンクです。

コメント

  • Teraiさん、初めまして。このページにお世話になったものです。Subversion用のAntタスクを探していて見つけたので、参考までにsvnant、導入までは自分のところにおいておきました。SvnAntについて。大して情報量はありませんが・・・ -- kent
    • とおもったら、subclipseへのリンクがありますね・・・ -- kent
  • いやリンクはしてますけど、SvnAntは全然使ったこと無かったです。参考にさせてもらいますね。 -- aterai
  • svnadmin setlog は、--bypass-hooks を指定すれば pre-revprop-change を用意しなくていいようです。 http://svnbook.red-bean.com/en/1.7/svn.ref.svnadmin.c.setlog.html -- rabbit
  • なるほど、週明け会社で試してみます。 -- aterai
  • svnadmin setlog をすこし変更し、rabbitさんの指摘もそのままコピーさせてもらいましたm(_ _)m。 -- aterai
  • 結城さんのところのSubversionの初心者用記事と合わせて、忘れたときなど参照させてもらっています。いつもありがとうございます。 -- s
    • こんばんは。自分でもMercurialなどと併用することが多くなりましたが、Subversionにも相変わらずお世話になってます。1.7.0もそろそろ出るみたいですし、このページの内容もレストアしておきたいところです。 -- aterai