Edit
Subversionとは

サブバージョンとは、ファイルの履歴も管理できるファイル共有システムです。通常は略してSVNと呼ばれています。また管理されているフォルダ一式単位を、リポジトリと呼ばれます。
Subversion Official Site

Edit
Installにおける確認と必要に応じた導入

Subversionでは以下のパッケージを必要とします。またここではデータの保存ファイルシステムとして、BerkerayDBも紹介してありますが、実用にはFSFS(Unix標準のファイルシステム)を利用することをおすすめします。なので、BerkerayDBのインストールはご希望で。

  1. NEOS, Swig, Expat
    順番通りにインストールした後、Subversionのインストールに入ります。

Edit
インストール

先に、sqliteをインストールと、apr&apr-utilのインストールをしておく。

Edit
scons

最新のlibserfをインストールするのに、sconsというビルドツールが必要になる。

# wget http://prdownloads.sourceforge.net/scons/scons-2.5.1.tar.gz
# tar zxvf scons-2.5.1.tar.gz
# cd scons-2.5.1
# python setup.py install
# wget http://prdownloads.sourceforge.net/scons/scons-3.0.1.tar.gz

Edit
libserfのインストール

これより新しいserf(ver.1.3.8など)だと、インストール手順が面倒な上、subversion で認識しない。

# wget http://serf.googlecode.com/files/serf-1.2.1.tar.bz2
# tar xjf serf-1.2.1.tar.bz2
# cd serf-1.2.1
# ./configure
# make
# make install

Subversionの最新では、1.3.4以降が要求される。

# wget https://www.apache.org/dist/serf/serf-1.3.9.tar.bz2
# tar xjf serf-1.3.9.tar.bz2
# cd serf-1.3.9
# scons APR=/usr/local/apr APU=/usr/local/apr OPENSSL=/usr/local/ssl PREFIX=/usr/local/serf
# scons install

Edit
Subversion本体のインストール

※最新の apache httpd をインストールしておかないとエラーになる場合がある。

# wget http://ftp.tsukuba.wide.ad.jp/software/apache/subversion/subversion-1.9.5.tar.gz
# tar zxvf subversion-1.9.5.tar.gz
# cd subversion-1.9.5
# ./configure --prefix=/usr/local/svn \
  --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr \
  --with-apxs=/usr/local/apache2/bin/apxs \
  --with-serf=/usr/local/serf \
  --without-berkeley-db \
  --without-swig \
  --with-lz4=internal \
  --with-utf8proc=internal
# make
# make install

その後リンク設定

# ln -s /usr/local/svn/bin/* /usr/local/bin/
# ln -s /usr/local/svn/libexec/* /usr/local/apache2/modules/
# echo /usr/local/svn/lib > /etc/ld.so.conf.d/usr_local_svn_lib.conf
# ldconfig

インストール状況の確認

# svn --version

もし/usr/local/lib/libsvn_ra_neon-1.so.0: cannot restore segment prot after reloc: Permission denied などのエラーがでたら、権限の変更を行います。

# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/lib/libsvn_ra_neon-1.so.0

Edit
各種設定

まずはapache2の設定ファイルにSVNのmod設定を行います。

Edit
apache用のmod subversioの設定ファイル

# emacs /usr/local/apache2/conf/httpd.conf
   #---------------------------------------------------#
   #   Subversion System Define                        #
   #---------------------------------------------------#
   LoadModule dav_module         modules/mod_dav.so
   LoadModule dav_svn_module     modules/mod_dav_svn.so
   LoadModule authz_svn_module   modules/mod_authz_svn.so

  <Location /svn/>
       DAV                     svn
       SVNAutoversioning       on
       SVNListParentPath       On
       SVNParentPath           /usr/local/svn
       SVNIndexXSLT            /svnindex.xsl
       AuthType                Basic
       AuthName                "Secured Development Repository"
       AuthUserFile            /usr/local/apache2/htpasswd
       AuthGroupFile           /usr/local/apache2/htgroup
       AuthzSVNAccessFile      /usr/local/svn/access_file
       order                   allow,deny
       Deny            from    all
       Require         group   subversion
       Satisfy                 any
   </Location>

Edit
/usr/local/apache2/ の下に設置するパスワードとグループファイル

このhtpasswdは、以下のコマンドを用いてユーザーを登録します。

# cd /usr/local/apache2
# htpasswd htpasswd <user-name>

グループファイルは、emacs 等のエディタで修正します。

 # emacs /usr/local/apache2/htgroup
   subversion: bill ken eva

Edit
/usr/local/svn の下に設置する access_fileの設定

# emacs /usr/local/access_file
[groups]
all-valid-member = bill,ken,eva

# root Repository
[/]
* =
@all-valid-member = r

# test Repository
[test:/]
* =
@all-valid-member = rw

#paint Repository
[paint2:/]
* =
ken = rw
bill = r

※Auth Nameに指定した文字列が、大部分のブラウザのパスワードダイアログに表示されます。
※基本認証用のユーザー&パスワードファイルはapacheのものを利用します。

Edit
データベースの導入

上記の設定ファイルで、/usr/local/svn 以下フォルダはすべてsvnリポジトリという指定をしたので、ここでは、testというリポジトリを作成します。

# mkdir /usr/local/svn
# chown -R apache:apache /usr/local/svn
# svnadmin create /usr/local/svn/test

Edit
セキュリティの設定

Subversionでは、独自の認証でリポジトリ毎に設定できます。各リポジトリディレクトリの直下の設定ファイルを修正してセキュリティを設定してください。

# cd /usr/local/apache2/svn/test/         <- testというリポジトリに移動
# emacs ./conf/svnserve.conf
  anon-access = none                      <- 匿名ユーザーはアクセス禁止
  auth-access = write                     <- 承認ユーザーは読み書き可能
  password-db = /usr/local/svn/test/htpasswd

Edit
利用者(クライアント)側の設定

Edit
Windows

利用者側では、エクスプローラ組み込みタイプと、Eclipseに導入するSubclipseタイプがある。お勧めはTortoiseSVNだ。
エクスプローラタイプのTortoiseSVN(Windows用)
上記、サイトで本体とランゲージパック(日本語)をダウンロードしてインストールするだけで、クライアント側はすぐに使える。

余談、Tortoiseは亀の意味だが、発音はトータス。日本で亀といえばタートル(Turtle)だが、これは米国の影響が大きい。実際、英国では主に海や川に棲んでいる大型種をTurtle、陸生のものを主にTortoiseと呼ぶが、米国では亀全体をTurtleと呼んでいる。

OS X用のSubversionクライアント(OSX用)

Edit
Linuxでの利用

SubversionのクライアントソフトをYumなどを利用して導入すると良いだろう。

# yum install subversion

<Test Project の Workingのコピー>
※下記でtestというフォルダがカレントに作成される。

# svn co http://localhost/svn/test

<Test Project の チェックイン>
オプション-mでコメントを記入している。必須。

# cd /target/path/to/
# svn ci -m 'It is comment for Revision'

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

リポジトリのバックアップでHDDの容量を気にしないのであれば、svnadmin dumpが便利である。

# svnadmin dump /usr/local/svn/project > project.dump

このコマンドで、projectリポジトリを1つのファイルにまとめられるので、このファイルを利用して他のリポジトリにload して復活させる。

# svnadmin load /usr/local/svn/project < project.dump

また、リビジョンの部分的な保存などを行うことも可能。
もし特定のディレクトリにロードしたい場合には

# svnadmin load --parent-dir subdir/prj2 /usr/local/svn/project < project.dump

Edit
PySVN (PythonからSubversionを利用する場合)

SubversionはCで記述されているので、Pythonから利用するにはC言語とのコネクターをインストールする必要があります。
PySVN 公式ページ

# wget http://pysvn.barrys-emacs.org/source_kits/pysvn-1.6.0.tar.gz
# tar zxvf pysvn-1.6.0.tar.gz
# cd pysvn-1.6.0/Source
# python setup.py configure
# make
# cd Tests
# Test pysvn by running make

Edit
Eclipseを利用した、Subclipseの導入の方法

Subclipse公式ページ

Edit
スペルチェック

TortoiseSVN は Open Office や Mozilla で使われるスペルチェッカモジュールを使用できます。スペルチェッカをインストールしている場合、ログメッセージを記入する際の属性の設定(tsvn:projectlanguage)でどのスペルチェッカを使用するか決定します。
国コードのリスト

Edit
StatSVN の活用

StatSVNはSubversionの利用状況をグラフで表示する機能を持つ。大変面白いので、ぜひSubversionと一緒に導入してほしい。

Edit
関連ページ

Edit
Install

# cd /usr/local/src
# wget http://transact.dl.sourceforge.net/sourceforge/statsvn/statsvn-0.4.1-source.zip
# unzip statsvn-0.4.1-source.zip

Edit
Compile

antを使ってコンパイルするため、apache antのページを参照して導入をしておいてから下記のコマンドを実行する。

# cd statsvn-0.4.1
# ant
# cp dist/statsvn.jar /usr/local/svn

Edit
StatSVNの実行

# cd /co-tmp
# svn co file:///usr/local/svn/test   (別サーバーの場合、svn://server/svn/test)
# cd test                             <- Check out したWorkingフォルダ
# svn log -v --xml > logfile.log
# mkdir /usr/local/apache2/htdocs/report   <- 公開フォルダを作成
# cd /usr/local/apache2/htdocs/report
# java -jar /usr/local/svn/statsvn.jar  \  <- statsvnの位置を指定
            /co-tmp/project/logfile.log \  <- 上記で作成したlogfileの位置を指定
            /co-tmp/project                <- 上記でCheckoutしたフォルダ

この後、http://server/report で表示される。

Edit
サンプル利用

#!/bin/bash
SRC_PATH="/usr/local/svn/checkout"
STATSVN_PATH="/usr/local/svn/util/statsvn"
JAVA="/usr/local/jdk/bin/java"
REP="/proj/trunk/mydb"
# do
svn update $SRC_PATH$REP
svn log --xml -v svn://localhost/rep$REP > $STATSVN_PATH$REP/svn.log
cd $STATSVN_PATH$REP
$JAVA -mx256m -jar $STATSVN_PATH/statsvn.jar $STATSVN_PATH$REP/svn.log $SRC_PATH$REP

Edit
Review Monk

http://reviewmonk.sourceforge.net/

Edit
DOSでの、.svn ファイルの一括削除

コマンドプロンプト

for /f "tokens=*" %d in ('dir /b/s/a:dh *.svn') do rmdir /q/s "%d"

Linux or Cygwin

find . -name ".svn" -exec rm -rf {} \;

Edit
トラブルシューティング

Edit
Can't find a temporary directory: Internal error

Edit
リネームだけ失敗する。

リバースプロキシ経由で SSL を LBで復号している場合に、複数コマンドの実行時にhttps と、http が混合してしまうことが問題になるため、http 側にもリダイレクトで https に飛ばす必要がある。

現在:対応不明

Edit
Visual SourceSafe(VSS)からの引越

マイクロソフト Visual Sourcesafe はすでにサポートも終了しており、過去のプロジェクトで利用していた場合、SVNに移植する必要がある。VSSはWindowsサーバーで稼働され、Visual Studio 2005などのクライアントから利用できる。

Edit
VSSサーバーのインストール。

Visual Studio 2005 評価版の Team Suiteには、Visual Source Safeが同梱されているため、ここからVSSサーバーのインストールを行う。但し評価版には添付されていないようだ。

Edit
参考リンク

http://tatsuya.info/pukiwiki/?Windows/Subversion%A4%C7%A5%D0%A1%BC%A5%B8%A5%E7%A5%F3%B4%C9%CD%FD
http://www-aos.eps.s.u-tokyo.ac.jp/~takagi/SubversionMemo.html
SSL関係についてわかりやすい説明
ルートSVNフォルダの一覧表示に関するバグ
access fileの設定の説明