Posted by at 2003-09-25

Subversion

概要

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

Subversionとは

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

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

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

このメモでの注意点

  • プロジェクトの名前を表すものとして、"hoge"、"gachk"などを使用しています。ただし、"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環境の場合、Subversionのconfigファイルは C:\Documents and Settings\ユーザ名\Application Data\Subversion 以下にあります。
    • このSubversionフォルダが存在しない場合、なにかコマンドを実行すれば新規生成されるようです。例えば、Subversionをインストールした後で、コマンドプロンプトなどから"svn help"を実行すれば、Subversion フォルダが生成され、その下に、config、servers、README.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

リポジトリの作成

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

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

mkdir c:\svn
svnadmin create c:\svn\gachk

"gachk"リポジトリの下に、"trunk"、"tags"などのディレクトリを作成します。

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

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

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

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

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

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

各ディレクトリの役割

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

repos.png

赤線を引いたところは、Apacheのhttpd.confファイルで設定したSVNParentPath(c:\svn)のエイリアスです。なんでもいいのですが、"svn"、"repos"、"svnrepos"などといったものを良く見かけます。

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

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

タグ付け

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

svn copy http://localhost/svn/gachk/trunk ^
         http://localhost/svn/gachk/tags/gachk-0.8.0 ^ 
         -m "gachk-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(ViewCVS)を導入することで、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://subversion.bluegate.org/doc/re40.html -- rabbit
  • なるほど、週明け会社で試してみます。 -- aterai
  • svnadmin setlog をすこし変更し、rabbitさんの指摘もそのままコピーさせてもらいましたm(_ _)m。 -- aterai
  • 結城さんのところのSubversionの初心者用記事と合わせて、忘れたときなど参照させてもらっています。いつもありがとうございます。 -- s
    • こんばんは。自分でもMercurialなどと併用することが多くなりましたが、Subversionにも相変わらずお世話になってます。1.7.0もそろそろ出るみたいですし、このページの内容もレストアしておきたいところです。 -- aterai