Top > Subversion > サーバ側

リポジトリを作る前に Edit

リポジトリには複数のプロジェクトを入れてもいいし、1つのプロジェクト毎にリポジトリを作ってもいい。
これは使用者の好みの問題らしい。

リビジョンはリポジトリに対してふられるので、
私は1プロジェクトに毎にリポジトリを作るのがいいと思う。
複数リポジトリを作る場合は、あちこちのディレクトリに作るのではなく、

/usr/local/svnroot/repos1
/usr/local/svnroot/repos2

のように1つディレクトリを決めて、その下に作っていくのがいいと思う。
(svnserveで公開するときのことを考えると)

リポジトリを作成する Edit

$ mkdir repos
$ svnadmin create repos

これだけ。
次にインポートを試してみること。

POSの場合は、リポジトリの所有者をposにしたかったので、次のようにした:
rootになって、

# mkdir /usr/local/pos_repos
# svnadmin create /usr/local/pos_repos
# chown -R pos:pos /usr/local/pos_repos

importする前に Edit

subversionではブランチやタグがディレクトリと同じ扱いで、
trunkというディレクトリを作って、そこにトランク(主幹)を入れる。

よって

repos/trunk
repos/branches
repos/tags

という3個のトップレベルディレクトリを作るのが普通らしい。
(ただし、1リポジトリ複数プロジェクトの場合はちょっと違ったりする)

そしてプロジェクトをtrunkの下にimportする。
アクセスするときは

svn://172.16.100.43/trunk/pos

のようになる。

Subversiveを使ってインポートする場合は、ダイアログでこの辺を設定できる。

リポジトリのレイアウトには2つ方法があり、良いと思う方を使えばよいようです。
各プロジェクト毎にtrunk/branchesを設ける方法

repos
   +--- projA
   |       +--- trunk
   |       +--- branches
   +--- projB
   :       +--- trunk
   :       +--- branches

リポジトリのトップでtrunk/branchesを設ける方法

repos
   +--- trunk
   |       +--- projA
   |       +--- projB
   +--- branches
           +--- projA
           +--- projB

svnサーバを立てて外部からアクセスできるようにする Edit

svnサーバには大きく分けて

  • svnserve(svn:// でアクセス)
  • svnserve + ssh(svn+ssh://でアクセス)
  • apacheを使う(http:// でアクセス)
    の3種類がある。

httpの方が便利な場合もあるようだが、手軽なのは svnserve である。
svn+ssh はけっこう面倒らしい。

svnserveを使う方法 Edit

以下ではsvnserveを使う方法を説明する。

まずは以下を/etc/init.d/svnserveとして保存。そしてchmod +x /etc/svnserveする。
/usr/local/pos_repos/のところを書きかえるのを忘れないように。

#!/bin/bash
#
# svnserve     This starts and stops svnserve.
#
# author       AOYAMA Shotaro

# for chkconfig------------------------------------------------------
# chkconfig: 2345 50 50
# description: svnserve allows users to access svn repositories \
#              via a network.
# processname: svnserve

# Source function library.
. /etc/rc.d/init.d/functions

prog=svnserve
pidfile=${PIDFILE-/var/run/svnserve.pid}
svnserve=/usr/bin/svnserve
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        # -r を指定しない場合は、システムのすべてのリポジトリが利用可能になる。
        # (svn://host.example.com/usr/local/repositories/のように絶対パスで指定する)
        daemon $svnserve -d -r /usr/local/pos_repos/
        RETVAL=$?
        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        killproc $svnserve
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${pidfile}
}


# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status $svnserve
        RETVAL=$?
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        RETVAL=1
esac

exit $RETVAL

ここで

/etc/init.d/svnserve start
/etc/init.d/svnserve stop

などと打てば起動・終了できるはずである。
さらに

service svnserve start

というようにserviceコマンドでできるようにするために、以下を行う。

chkconfig --add svnserve

次に、リポジトリにアクセスできるユーザを設定する。

リポジトリのディレクトリへ移動し、conf/svnserve.confを編集する。
以下の3行がコメントアウトされているので、コメントを外して有効化する。

[general]
anon-access = read
auth-access = write
password-db = passwd

conf/passwdファイルを編集する。

aoyama = apple

のように、1行に1人、ユーザ名=パスワードの形で記述する。

編集し終わったら、svnserveを再起動する。

コミット後、自動的にウェブサーバに反映させる Edit

コミット後、自動的に apache や Tomcat などのウェブサーバで管理しているディレクトリ
にも反映させるようにするには、post-commitフックを使う。

cd hooks
vi post-commit
chmod +x post-commit

post-commitの中には以下を記述。

#!/bin/sh

REPOS="$1"
REV="$2"

# ここはプロジェクトごとに書きかえること!
POSROOT=/usr/local/apache-tomcat-6.0.13/webapps/pos_auto

svn update $POSROOT &

コミットログの入力を強制させる Edit

ログを入力しないとコミットできないようにするには、pre-commitフックを使う。

cd hooks
vi pre-commit
chmod +x pre-commit

pre-commitの中には以下を記述。

#!/bin/sh

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook

# コミットログがスペースまたはタブしか含まない場合、空とみなしてコミットさせない。
$SVNLOOK log -t "$TXN" "$REPOS" | grep "[^ \t]" > /dev/null
ret=$?

if [ $ret -ne 0 ]; then
        echo "必ずコミットログを入力してください! by aoyama" 1>&2
        exit 1
fi


# All checks passed, so allow the commit.
exit 0

Windowsでsvnサーバを立てる Edit

svnserveをWindowsのサービスとして登録するには、DOSプロンプトから以下ようなコマンドを実行する。
(1行で入力すること)

 sc create svnserve
      binpath= "c:\svn\bin\svnserve.exe --service -r c:\svnroot"
      displayname= "Subversion Repository"
      depend= Tcpip

svnserve.exeへのパスの間にスペースが入っていると、ダブルクォートでエスケープ
しなければいけなく、面倒なので、c:\svnなどにインストールするのがいいと思う。

そして Windows ファイアーウォール→「例外」タブ→
「ポートの追加」→名前:「svnserve」ポート番号「3690」
で穴をあける。

参考:
http://svn.collab.net/repos/svn/trunk/notes/windows-service.txt

WebSVN Edit

WebSVNはphpで出来ていて、ウェブ上からブラウザを使ってSVNのリポジトリを表示することができるソフトです。

websvn はスペースを含むパスにインストールするとdiffが使えなくなってしまうので注意!

  • リポジトリのファイル一覧を表示できる
  • 最終更新時刻やログを表示できる
  • RSSフィードができる
  • コミットなどは出来ない

下記URLで実際に動いています。
http://global.skill.ne.jp/inside/websvn/

インストール Edit

http://websvn.tigris.org/servlets/ProjectDocumentList
から好きなバージョンをダウンロード。

展開してできたディレクトリをApache管理下のディレクトリに移動。

include/distconfig.incをconfig.incにリネームする(これが設定ファイル)。
config.incのリポジトリのパスと文字コードの設定を変更。

# diff distconfig.inc config.inc
57a58
> $config->addRepository("POS", "/usr/local/pos_repos");
85c86
< // include("languages/japanese-utf8.inc"); // (FedoraCore/Max OS X/BeOS)
---
> include("languages/japanese-utf8.inc"); // (FedoraCore/Max OS X/BeOS)
97a99
> $config->setInputEncoding("utf-8");  // Encoding of log messages returned by svnlook
on your system
98a101
> $config->setOutputEncoding("utf-8"); // Encoding of resulting web page

以上でとりあえず動くようになるが、日本語のログメッセージが化けてしまうので、
include/command.incを次のように変更。

# diff command.inc.orig command.inc
96c96,97
<    return $cmd;
---
>    //return $cmd;
>    return "LANG=ja_JP.UTF-8;export LANG;" . $cmd;

これは次のページからの情報:
http://nyanyan.to/archives/78

ファイルの中身を表示できない場合は Edit

svn: /root/.subversion なんたら

画面からファイルの中身を見ようとしたときエラーメッセージが出る場合は、
apacheを実行しているユーザに/root/.subversionを読みとるパーミッションを与えればよい。~]

# vi /etc/group で root の行に apache を加えて、
# chmod -R g+r /root/.subversion

参考:
http://svn.haxx.se/users/archive-2005-10/0352.shtml



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes