Posted by at 2003-09-25

Subversion

概要

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

Subversionとは

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

概要

このページは、バージョン管理システムのSubversionをWindows環境で使用する場合の手順などをサンプルを用いて解説しています。
  • リポジトリにリビジョンがつく
  • コミットがアトミック
  • ファイルの移動
  • ディレクトリの作成・削除
  • ネットワーク対応
  • 言語バインディング

Subversionとは

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

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

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

このメモでの注意点

  • プロジェクトの名前を表すものとして、"hoge"、"gachk"などを使用しています。ただし、"xyzzy"はエディタ*1です。

このメモでの注意点

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

使い方

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

使い方

コマンドプロンプトなどから使う場合は、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

リポジトリ

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

リポジトリの作成

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

リポジトリの作成

以下、例としてプロジェクト名がHogeのリポジトリを作ってみます。 まず、SVNParentPathとしてc:\svn(これはただのディレクトリ)を作成し、この下にhogeプロジェクトなどのリポジトリを作成、初期化します。
mkdir c:\svn
svnadmin create c:\svn\gachk
svnadmin create c:\svn\hoge
"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の作成"
hogeリポジトリの下に、trunktagsなどのディレクトリを作成します。 e:\gachk 以下に置かれたソースディレクトリなどを、リポジトリにインポートします。
mkdir e:\gachk\src
svn import e:\gachk file://localhost/c:/svn/gachk/trunk -m "srcをimport"
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の作成"
生成したリポジトリのtrunk以下の内容を、任意のディレクトリ(c:\dev\gachk)以下にチェックアウトします。ディレクトリは相対パスで指定可、存在しない場合は自動生成、省略した場合は指定したリポジトリの末尾(以下の場合trunk)のディレクトリが生成されます。 例えばe:\hoge 以下に置かれていたソースディレクトリなどを、リポジトリにインポートします。
svn co file://localhost/c:/svn/gachk/trunk c:\dev\gachk
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版)でネットワーク対応)、作成したリポジトリをブラウザで見てみると、以下のようになります。

各ディレクトリの役割

Apache2を導入して(Apache2(Windows版)でネットワーク対応)、作成したリポジトリをブラウザで見てみると、以下のようになります。
repos.png
repos.png
赤線を引いたところは、Apacheのhttpd.confファイルで設定したSVNParentPath(c:\svn)のエイリアスです。なんでもいいのですが、"svn"、"repos"、"svnrepos"などといったものを良く見かけます。 赤線を引いたところは、Apachehttpd.confファイルで設定したSVNParentPath(c:\svn)のエイリアスです。なんでもいいのですが、svnrepossvnreposなどが多いようです。 青線の部分はプロジェクト名をディレクトリに、またその下に "trunk"、"tags"、"branches"を作っています。このサンプルプロジェクトでは、それぞれ以下のようになっています。
ディレクトリ"GaChk"プロジェクトでの内容
trunk"src"ディレクトリ、"build.xml"、"bulid.properties"などが入っています。
tags"gachk-0.1.0"、"gachk-0.5.1"といったディレクトリが入っています。これらは、リリースしたリビジョンでの"trunk"ディレクトリのコピーになっています。
branchesブランチをいれますが、小さいプロジェクトなので今のところ空です。
青線の部分はプロジェクト名をディレクトリに、またその下に trunktagsbranchesを作っています。このサンプルプロジェクトでは、それぞれ以下のようになっています。

タグ付け

例えばバージョン0.8.0をリリースした場合、以下の要領でタグ付けをしておきます(コマンドプロンプトで入力する場合は、^は使用せず、一行で入力してください)。
ディレクトリHogeプロジェクトでの内容
trunksrcディレクトリ、build.xmlbulid.propertiesなどが入っています。
tagshoge-0.1.0hoge-0.5.1といったディレクトリが入っています。これらは、リリースしたリビジョンでのtrunkディレクトリのコピーになっています。
branchesブランチをいれますが、小さいプロジェクトなので今のところ空です。
svn copy http://localhost/svn/gachk/trunk ^
         http://localhost/svn/gachk/tags/gachk-0.8.0 ^ 
         -m "gachk-0.8.0としてリリース"

タグ付け

例えばバージョン0.8.0をリリースした場合、以下の要領でタグ付けをしておきます(コマンドプロンプトで入力する場合は、^は使用せず、一行で入力してください)。 Subversionでのcopyは、ファイルそのものをコピーしている訳ではないので、ディスク容量を浪費しません。
svn copy http://localhost/svn/hoge/trunk ^
         http://localhost/svn/hoge/tags/hoge-0.8.0 ^
         -m "hoge-0.8.0としてリリース"

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

"svnadmin dump"で、データベースにあるリポジトリをダンプファイルとしてバックアップすることができます。 Subversionでのcopyは、ファイルそのものをコピーしている訳ではないので、ディスク容量を浪費しません。

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

svnadmin dumpで、データベースにあるリポジトリをダンプファイルとしてバックアップすることができます。
svnadmin dump c:\svn\hoge > c:\temp\hoge.dump
逆にダンプファイルをデータベースにロードするには、"svnadmin load"を使用します。 逆にダンプファイルをデータベースにロードするには、svnadmin loadを使用します。
svnadmin create c:\svn\hoge2
svnadmin load c:\svn\hoge2 < c:\temp\hoge.dump

Subversionに大きなバージョンアップなどがあった場合、リポジトリスキーマ自体が更新されて、古いリポジトリを新しいものにアップグレードする必要がある*3ことがあります。これらの場合、まず古いバージョンの"svnadmin.exe"を使ってダンプファイルを作成し、新しい"svnadmin.exe"で、リポジトリの新規作成、ダンプファイルのロードを行います。古いバージョンのWindows用バイナリなどは、Windows Archiveにあります。 Subversionのバージョンアップでリポジトリスキーマが更新された場合、リポジトリのアップグレードが必要になる*4ことがあります。これらの場合、まず古いバージョンの"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)などで無視するよう設定します。

ログの修正

無視パターン

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

ログの修正

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

ネットワーク対応

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

ネットワーク対応

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

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

  • ViewVC(←ViewCVSから名前が変更されました)
    • ViewVC(ViewCVS)を導入することで、Subversionのリポジトリをブラウザからより詳しく閲覧することができます。

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

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

参考リンク

Subversion関係のリンクです。

参考リンク

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
  • 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