ubuntuサーバにSubversionを入れる

ubuntuサーバにSubversionを入れる手順をメモしておきます。

初期設定

 # Apache2のインストール
 % sudo apt-get install apache2

 # Subversionのインストール
 % sudo apt-get install subversion subversion-tools libapache2-svn

 # Subversionの設定
 % sudo vi /etc/apache2/mods-enabled/dav_svn.conf
 
 # 下記のように書き換える
 
  DAV svn 
  SVNParentPath /home/svn
 

 # 設定反映のため、Apacheの再起動
 % sudo /etc/init.d/apache2 restart

 # Subversionのテスト
 # testという名前でレポジトリを作成する。
 % sudo mkdir /home/svn/
 % cd /home/svn/
 % sudo svnadmin create test
 
 # いろいろとファイルができる ※これらのファイルをいじることはない
 % ls test
 
 [期待値]
 README.txt  conf  dav  db  format  hooks  locks

 # Apacheを通じてレポジトリを公開する ※ディレクトリの権限変更
 % cd /home/svn
 % sudo chown -R www-data.www-data test
 
 # 確認
 % ls -ld test
 
 [期待値]
 drwxr-xr-x 7 www-data www-data 4096 2008-11-29 14:03 test/
  • 試してみる
 % cd
 % mkdir test
 % cd test
 % cat > test
 aaa
 bb
 ccc
 ^D
 % cd ../
 
 # importする
 % svn import test/  http://localhost/svn/test/ -m "import test"
 
 # checkoutする
 % svn checkout http://localhost/svn/test
 
 # webから見てみる
 http://localhost/svn/test/

概要

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
  1. CVS では tag や branch が各ファイル毎に管理されるが、Subversion では「別ディレクトリ/ファイルへのコピー」で管理される。
 * cvs tag aTagName aSubdir
 * svn copy aSubdir aSubdir_aTagName
  1. CVS の merge はタグ名が使えるのに対し、subversion の merge はリビジョン番号や日付などで指定する。
  2. subversionsvn コマンドは同じ表記でリポジトリの直接操作とローカルマシンのワーキングコピーの操作を実現するので注意を要する。
 * svn copy aSubdir anotherDir はワーキングコピーでの操作で, 次に svn commit を実行することでリポジトリに反映される。
 * svn copy some_repository/.../aSubdir some_repository/.../anotherDir では直接リポジトリが変更される。

一般に subversion ではリポジトリの構成を以下のようにするのがよい、と提案されている。

 * /trunk//...
 * /branches///...
 * /tags///...

この場合 branch/tag を作成するのは以下のような書式になる。

 % svn copy some_repository/aProject/trunk some_repository/aProject/branches/aBranchName