2009-11-21T05:37:30の更新内容

softwares/debian/inetd-svnserve/index.wiki.txt

current previous
0,0 1,46
-
${smdncms:title,inetd + svnserve}
-
${smdncms:keywords,inetd,svnserve,Subversion}
-
Debian "etch"でsvnserveをinetd経由で起動する。
-

                  
-
-関連するページ
-
--[[softwares/fedora/subversion]] xinetd経由でsvnserveを起動する方法
-
--[[softwares/svk]]
-

                  
-
*手順
-
まずSubversionをインストールする。
-

                  
-
 # apt-get install subversion
-

                  
-
次にsvnserveを動作させるためのユーザsvnを作成する。
-

                  
-
 # useradd svn
-

                  
-
続いてリポジトリを格納するディレクトリを作成する。 svnserveが書き込めるようにオーナをsvnにしておく。
-

                  
-
 # mkdir /srv/repos
-
 # chown -R svn:svn *
-

                  
-
/etc/servicesにsvnのサービス名と使用ポート番号が記述されていることを確認する(もしなければ追記する)。
-

                  
-
   svn             3690/tcp        subversion      # Subversion protocol
-
   svn             3690/udp        subversion
-

                  
-
/etc/inetd.confにsvnserveの起動パラメータを追記する(-rオプションでリポジトリを格納するディレクトリを指定している)。
-

                  
-
 svn stream tcp nowait svn /usr/sbin/tcpd /usr/bin/svnserve -i -r /srv/repos
-

                  
-
/etc/hosts.allowにsvnserveへのアクセスを許可するホストを記述する。 以下は内部ネットワークからの接続のみを許可する場合の例。
-

                  
-
 svnserve: 127.0.0.1 192.168.0.0/24
-

                  
-
ここまでで必要な設定が完了したので、inetdを再起動する。
-

                  
-
 # /etc/init.d/openbsd-inetd restart
-

                  
-
telnet localhost svnでsvnserveにアクセスして、次のようなメッセージが表示されればsvnserveが正常に動作していることが確認できる。
-

                  
-
 Treying 127.0.0.1...
-
 Connected to localhost.
-
 Escape character is '^]'.
-

                  
-
 Connection closed by foreign host.

softwares/subversion/index.wiki.txt

current previous
1,302 1,39
 
${smdncms:title,Subversion}
${smdncms:title,Subversion}
~
${smdncms:keywords,Subversion,svnadmin,svnsync,xinetd,inetd}
${smdncms:keywords,Subversion,svnadmin}
~
バージョン管理システム[[Subversion:http://subversion.tigris.org/]]のインストール、初期設定、Tipsなど。
Subversionに関するTips。
 

                

                
 
-関連するページ
-関連するページ
-
--[[softwares/fedora/subversion]]
-
--[[softwares/debian/inetd-svnserve]]
 
--[[softwares/svk]]
--[[softwares/svk]]
+
--[[softwares/fedora/redmine]]
 

                

                
~
*svnserve
*タグ・ブランチを作成する
+
svnserveデーモンを起動させるための設定方法。 ここではローカルネットワーク内からのアクセスのみを許可する条件で設定を行う。
+

                  
+
まずはsvnserveを動作させるためのユーザ(ここではsvnとする)を作成する。
+
#code(sh){{
+
useradd svn
+
}}
+

                  
+
続いてリポジトリを格納するルートディレクトリ(ここでは/srv/repos)を作成する。 svnserveが書き込めるようにオーナをsvnにしておく。
+
#code(sh){{
+
mkdir /srv/repos
+
chown -R svn:svn *
+
}}
+

                  
+
/etc/servicesにsvnのサービス名と使用ポート番号が記述されていることを確認する(もしなければ追記する)。
+
#code(,/etc/services){{
+
svn   3690/tcp  subversion  # Subversion protocol
+
svn   3690/udp  subversion
+
}}
+

                  
+
/etc/hosts.allowに下記の内容を追記し、内部ネットワークからの接続のみを許可する。
+
#code(,/etc/hosts.allow){{
+
svnserve : 192.168.0. 127.0.0.1
+
}}
+

                  
+
また、iptablesなどを使ってファイヤーウォールの設定がされている場合は、3690番のポートを忘れずに空けておくこと。
+

                  
+
続いて、inetdもしくはxinetdでsvnserveを起動するための設定を行う。
+

                  
+
**xinetd経由でsvnserveを起動する場合
+
xinetdの設定をするために、/etc/xinetd.d配下にsvnというファイルを作成し、下記の内容を書き込む。
+
#code(,/etc/xinetd.d/svn){{
+
service svn
+
{
+
        disable         = no
+
        socket_type     = stream
+
        wait            = no
+
        user            = svn
+
        server          = /usr/bin/svnserve 
+
        server_args     = -i -r /srv/repos
+
        log_on_failure  += USERID
+
        only_from       = 192.168.0.0/24 127.0.0.1
+
}
+
}}
+
設定項目の意味は次の通り。
+
:user|svnserveを実行するユーザ。
+
:server|svnserveへのフルパス。
+
:server_args|svnserveに渡す引数。 「-r /srv/repos」でリポジトリのルートディレクトリを/srv/reposに設定している。
+
:log_on_failure|接続に失敗した場合、ユーザ名をログに記録する。
+

                  
+
続いて、chkconfigコマンドを使ってsvnserveを起動できるようにする。
+
#code(sh){{
+
# svnserveを起動するようにする
+
chkconfig --add svnserve 
+

                  
+
# 設定が反映されているか確認する
+
chkconfig --list svnserve
+
}}
+
上記のコマンドを打ったあと、次のように表示されればOK。
+
#prompt{{
+
svnserve:       on
+
}}
+

                  
+
起動設定が整ったところで、xinetdを再起動する。
+
#code(sh){{
+
service xinetd restart
+
}}
+

                  
+
telnetでsvnserveに接続して、次のようなメッセージが表示されればsvnserveが正常に動作していることが確認できる。
+
#prompt{{
+
$ telnet localhost svn
+
Trying 127.0.0.1...
+
Connected to localhost.
+
Escape character is '^]'.
+
( success
+
Connection closed by foreign host.
+
}}
+

                  
+
**inetd経由でsvnserveを起動する場合
+
/etc/inetd.confにsvnserveの起動パラメータを追記する。 xinetdの場合と同様、「-r /srv/repos」でリポジトリのルートディレクトリを/srv/reposに設定している。
+
#code(,/etc/inetd.conf){{
+
svn stream tcp nowait svn /usr/sbin/tcpd /usr/bin/svnserve -i -r /srv/repos
+
}}
+

                  
+
起動設定が整ったところで、inetdを再起動する。
+
#code(sh){{
+
/etc/init.d/openbsd-inetd restart
+
}}
+

                  
+
telnetでsvnserveに接続して、次のようなメッセージが表示されればsvnserveが正常に動作していることが確認できる。
+
#prompt{{
+
$ telnet localhost svn
+
Trying 127.0.0.1...
+
Connected to localhost.
+
Escape character is '^]'.
+
( success
+
Connection closed by foreign host.
+
}}
+

                  
+
**リポジトリの作成・設定
+
まずはリポジトリを作る。 ここではsandboxというリポジトリを/srv/reposに作成する。
+
 # svnになる
+
 su svn
+
 # svnadmin createでリポジトリを作成
+
 svnadmin create /srv/repos/sandbox
+
続いて、リポジトリのアクセス設定を行う。 リポジトリを作成すると自動的にconfディレクトリが作成される。 その中に次の三つのファイルが作成される。
+
:svnserve.conf|svnserve経由でのリポジトリへのアクセス制限。 ユーザ設定ファイル・アクセス設定ファイルの指定など。
+
:passwd|ユーザとパスワードの指定。
+
:authz|ユーザごとのアクセス設定。
+

                  
+
まずはsvnserve.confの設定例。
+
#code(svnserve.conf){{
+
[general]
+
anon-access = none          # Anonymous(匿名)ユーザのアクセスを許可しない
+
auth-access = write         # 認証済みユーザには書き込み権限を与える
+
password-db = passwd        # パスワードファイルをpasswdとする
+
realm = sandbox             # リポジトリの説明(適当でOK)
+
}}
+
anon-access、auth-accessに設定できる値は次の三つ。
+
:none|アクセスを許可しない
+
:read|読み込み権限を与える
+
:write|読み込み、書き込みの両方の権限を与える
+

                  
+
続いてpasswdの設定例。 リポジトリにアクセスするユーザの数だけ「ユーザ名=パスワード」の形式で記述する。
+
#code(passwd){{
+
[users]
+
smdn=password
+
}}
+

                  
+
authzについては省略。 passwdファイルの編集が終わったら、アクセス権限をsvnだけに設定して、他のユーザからアクセスできないようにする。
+
#code(sh){{
+
cd /srv/repos/sandbox/conf
+
chmod 600 passwd
+
chown svn:svn passwd
+
}}
+

                  
+
ここまでで設定は完了。 作成したリポジトリをチェックアウトできるようになる。
+
#prompt{{
+
$ svn co svn://localhost/sandbox/ ./sandbox
+
認証領域: <svn://localhost:3690> sandbox
+
'smdn' のパスワード:
+
リビジョン 0 をチェックアウトしました。
+

                  
+
$ svn info ./sandbox
+
パス: sandbox
+
URL: svn://localhost/sandbox
+
リポジトリのルート: svn://localhost/sandbox
+
リポジトリ UUID: a3c65e7f-1127-41a2-baf2-0f721aaea87c
+
リビジョン: 0
+
ノード種別: ディレクトリ
+
準備中の処理: 特になし
+
最終変更リビジョン: 0
+
最終変更日時: 2009-11-21 05:08:44 +0900
+
}}
+

                  
+
#googleadunit
+

                  
+
*svnsync
+
svnsyncでリポジトリのミラーを作成する方法。
+

                  
+
まずシンク(ミラー先)リポジトリを作成。 作成したら、必要に応じてconf/authz, conf/passwdなどを変えておく。
+
#code(sh){{
+
svnadmin create sync
+
}}
+

                  
+
続いて、リポジトリ内のhooksディレクトリにあるpre-revprop-change.tmplとstart-commit.tmplをコピー、編集してsvnsyncするユーザのみアクセスできるようにする。
+
#code(sh){{
+
cd sync/hooks
+
cp pre-revprop-change.tmpl pre-revprop-change
+
chmod u+x pre-revprop-change
+
cp start-commit.tmpl start-commit
+
chmod u+x start-commit
+
}}
+

                  
+
それぞれのファイルの内容は次のとおり。 svnはsvnsyncを実行するユーザ。
+
#code(sh,pre-revprop-change.sh){{
+
#!/bin/sh
+
USER="$3"
+

                  
+
if [ "$USER" = "svn" ]; then
+
  exit 0
+
else
+
  exit 1
+
fi
+
}}
+

                  
+
#code(sh,start-commit.sh){{
+
#!/bin/sh
+
USER="$2"
+

                  
+
if [ "$USER" = "svn" ]; then
+
  exit 0
+
else
+
  exit 1
+
fi
+
}}
+

                  
+
svnsync initでシンクリポジトリを初期化。
+
#prompt{{
+
svnsync init file:///srv/sync/ file:///srv/repos/project/
+
リビジョン 0 の属性をコピーしました。
+
}}
+

                  
+
svnsyncを実行したとき、
+
#prompt{{
+
svnsync: リポジトリが、リビジョン属性を変更できるようにはなっていません。
+
管理者に pre-revprop-change フックを作成するよう頼んでください
+
}}
+
と表示される場合は、フックの設定に誤りがある。
+

                  
+
初期化がうまくいったら、svnsync syncでリポジトリを同期する。
+
#prompt{{
+
svnsync sync file:///srv/sync/
+
リビジョン 1 をコミットしました。
+
リビジョン 1 の属性をコピーしました。
+
リビジョン 2 をコミットしました。
+
リビジョン 2 の属性をコピーしました。
+
ファイルのデータを送信しています .....
+
リビジョン 3 をコミットしました。
+
リビジョン 3 の属性をコピーしました。
+
  :
+
  :
+
}}
+

                  
+
あとは同期したいタイミングでsvnsync syncを繰り返す。
+

                  
+
*TortoiseSVN
+
[[TortoiseSVN:http://tortoisesvn.tigris.org/]]の使い方。
+
**自動的に属性を着けるには
+
TortoiseSVNの設定ファイルを編集することで、ファイルをリポジトリに追加する時点で自動的に属性を付与させることができる。 これにより「$Date: 2010-04-07 19:42:39 +0900 (水, 07  4月 2010) $」などが自動的に日付に展開されるようになる。 また、拡張子からMIMEタイプを判断させるようにすることも出来る。 以下はその設定方法。
+

                  
+
まずエクスプローラ上で右クリックし、メニューからTortoiseSVN→Settingsの順に選択。 続いて出現する画面からGeneralを選択し、「Subversion configuration file」の横にあるEditボタン(赤い矢印の部分)をクリックする。
+
#ref(tortoisesvn_00.jpg,Subversion configuration file)
+
テキストエディタが開いて設定ファイルの内容が表示されるので、次の内容を書き込む。
+
#code{{
+
[miscellany]
+
enable-auto-props = yes # 自動的に属性をつけるようにする
+

                  
+
[auto-props]
+
*.cpp = svn:keywords=Id Date Rev Author # 拡張子が.cppの場合は、コミット時に
+
                                        # Id, Date, Rev, Authorの各キーワードを展開する
+
*.h   = svn:keywords=Id Date Rev Author
+
*.png = svn:mime-type=image/png         # 拡張子が.pngの場合は、MIMEタイプをimage/pngに設定する
+
*.jpg = svn:mime-type=image/jpeg
+
*.bmp = svn:mime-type=image/bmp
+
*.psd = svn:mime-type=image/x-photoshop
+
*.ico = svn:mime-type=image/x-icon
+
}}
+

                  
+
この設定をした上で、たとえばファイル中に「$Id: 20091121-0537.diff.txt 696 2010-04-07 10:42:39Z smdn $」と書いておくと次のように展開されるようになる。
+
#code{{
+
$Id: 20091121-0537.diff.txt 696 2010-04-07 10:42:39Z smdn $
+
}}
+
$Idのあとに続けて、順に「ファイル名、リビジョン番号、最終変更日時、最後に変更を行ったユーザ」の各値が展開される。
+

                  
+
*Tips
+
**タグ・ブランチを作成する
 
タグやブランチを作成するにはsvn copyでtrunkをコピーする。 例えば、現在のtrunkの状態にtags/release-1.0という名前を付けるには次のようにする。
タグやブランチを作成するにはsvn copyでtrunkをコピーする。 例えば、現在のtrunkの状態にtags/release-1.0という名前を付けるには次のようにする。
~
#code{{
 svn copy svn://repos/someproject/trunk svn://repos/someproject/tags/release-1.0 -m "version 1.0"
+
svn copy svn://repos/someproject/trunk svn://repos/someproject/tags/release-1.0 -m "version 1.0"
+
}}
 

                

                
~
**属性(プロパティ)を付ける
*属性(プロパティ)を付ける
 
バージョン管理されているファイルに属性を設定するには、svn propsetを使う。
バージョン管理されているファイルに属性を設定するには、svn propsetを使う。
~
#code{{
 svn propset svn:keywords "URL Rev Id Date Author" sample.c
+
svn propset svn:keywords "URL Rev Id Date Author" sample.c
+
}}
 
他にも属性に関連するコマンドには次のようなものがある。
他にも属性に関連するコマンドには次のようなものがある。
 
:propget|付与されている属性の値を表示する
:propget|付与されている属性の値を表示する
 
:proplist|付与されている属性を一覧にして表示する
:proplist|付与されている属性を一覧にして表示する
 
:propdel|付与されている属性を削除する
:propdel|付与されている属性を削除する
 
:propedit|外部エディタを使って属性の値を編集する
:propedit|外部エディタを使って属性の値を編集する
 

                

                
~
**リポジトリをリネームする
*リポジトリをリネームする
 
リポジトリをリネームする場合は、
リポジトリをリネームする場合は、
 
+新しいリポジトリ名で現在のリポジトリの複製を作る
+新しいリポジトリ名で現在のリポジトリの複製を作る
 
+現在のリポジトリを削除する
+現在のリポジトリを削除する
 

                

                
 
という手順で変更できる。
という手順で変更できる。
~
#code(sh){{
 svnadmin create repo_new
~
svnadmin create repo_new
 svnadmin dump repo_old | svnadmin load repo_new
~
svnadmin dump repo_old | svnadmin load repo_new
 rm -rf repo_old
+
rm -rf repo_old
+
}}
 
なお、svnadmin dump/loadではリポジトリのパーミッション、設定ファイル類はコピーされないので、忘れずにコピーする
なお、svnadmin dump/loadではリポジトリのパーミッション、設定ファイル類はコピーされないので、忘れずにコピーする
~
#code(sh){{
 chmod -R g+w repo_new
~
chmod -R g+w repo_new
 cp -ipr repo_old/conf/* repo_old/conf/*
+
cp -ipr repo_old/conf/* repo_old/conf/*
+
}}
 

                

                
~
**異なるバージョン間でのリポジトリ移動
*異なるバージョン間でのリポジトリ移動
 
あるバージョンのSubversionで管理されているリポジトリを、別のバージョンのSubversionで管理されている環境に移動する場合は、svnadmin dump/loadを使い次の手順で行う。
あるバージョンのSubversionで管理されているリポジトリを、別のバージョンのSubversionで管理されている環境に移動する場合は、svnadmin dump/loadを使い次の手順で行う。
 
+バージョンAのsvnadminでリポジトリをダンプする
+バージョンAのsvnadminでリポジトリをダンプする
 
 svnadmin dump /path/to/repos > dumpfile
 svnadmin dump /path/to/repos > dumpfile
304,79 41,75
 
+バージョンBのsvnadminでダンプしたリポジトリをロードする
+バージョンBのsvnadminでダンプしたリポジトリをロードする
 
 svnadmin load /path/to/repos < dumpfile
 svnadmin load /path/to/repos < dumpfile
 

                

                
~
**リポジトリと初期ディレクトリの構成を自動的に作成するスクリプト
*リポジトリと初期ディレクトリの構成を自動的に作成するスクリプト
 
定形のリポジトリを自動的に作成する目的で作成したスクリプト。 このスクリプトは、リポジトリを作成したあと次のような初期ディレクトリ構成をリポジトリにインポートする。
定形のリポジトリを自動的に作成する目的で作成したスクリプト。 このスクリプトは、リポジトリを作成したあと次のような初期ディレクトリ構成をリポジトリにインポートする。
~
#code{{
 /
~
/
 |-- README
~
|-- README
 |-- tags/
~
|-- tags/
 |-- branches/
~
|-- branches/
 `-+ trunk/
~
`-+ trunk/
   |-- src/
~
  |-- src/
   `-- bin/
+
  `-- bin/
+
}}
 
また、設定ファイルのテンプレート.svnserve.confをコピーし、作成したリポジトリの設定ファイルに上書きする。
また、設定ファイルのテンプレート.svnserve.confをコピーし、作成したリポジトリの設定ファイルに上書きする。
~
#code(sh){{
 #!/bin/bash
~
#!/bin/bash
 
~

                  
 # usage: makerepo.sh reponame
~
# usage: makerepo.sh reponame
 
~

                  
 REPONAME=$1
~
REPONAME=$1
 REPOSDIR='/var/repos'
~
REPOSDIR='/var/repos'
 TEMPDIR='/tmp/repolayout'
~
TEMPDIR='/tmp/repolayout'
 TEMPLOGFILE="$REPOSDIR/tmp.txt"
~
TEMPLOGFILE="$REPOSDIR/tmp.txt"
 LOGMESSAGE='imports initial directory layout'
~
LOGMESSAGE='imports initial directory layout'
 SVNREPOFSTYPE='fsfs'
~
SVNREPOFSTYPE='fsfs'
 SVNREPOCREATE="/usr/bin/svnadmin create --fs-type $SVNREPOFSTYPE"
~
SVNREPOCREATE="/usr/bin/svnadmin create --fs-type $SVNREPOFSTYPE"
 SVNREPOIMPORT="/usr/bin/svn import --file $TEMPLOGFILE"
~
SVNREPOIMPORT="/usr/bin/svn import --file $TEMPLOGFILE"
 
~

                  
 #
~
#
 # リポジトリを作成する
~
# リポジトリを作成する
 #
~
#
 echo "creates repository '$REPONAME'"
~
echo "creates repository '$REPONAME'"
 
~

                  
 $SVNREPOCREATE $REPOSDIR/$REPONAME
~
$SVNREPOCREATE $REPOSDIR/$REPONAME
 
~

                  
 #
~
#
 # 初期ディレクトリ構成(trunk, branches, tags, README)を作成する
~
# 初期ディレクトリ構成(trunk, branches, tags, README)を作成する
 #
~
#
 echo "creates initial directory layout"
~
echo "creates initial directory layout"
 
~

                  
 mkdir -p $TEMPDIR
~
mkdir -p $TEMPDIR
 cd $TEMPDIR
~
cd $TEMPDIR
 mkdir trunk branches tags
~
mkdir trunk branches tags
 : > README
~
: > README
 
~

                  
 #
~
#
 # trunk以下のディレクトリを作成する
~
# trunk以下のディレクトリを作成する
 #
~
#
 echo "make source directory(y/n)"
~
echo "make source directory(y/n)"
 read makesourcedir
~
read makesourcedir
 
~

                  
 if [ "$makesourcedir" = 'y' ]
~
if [ "$makesourcedir" = 'y' ]
 then
~
then
   cd trunk
~
  cd trunk
   mkdir bin src
~
  mkdir bin src
   cd -
~
  cd -
 fi
~
fi
 
~

                  
 ls -lR
~
ls -lR
 
~

                  
 #
~
#
 # 初期ディレクトリ構成をリポジトリにインポートする
~
# 初期ディレクトリ構成をリポジトリにインポートする
 #
~
#
 echo "imports initial directory layout to repository"
~
echo "imports initial directory layout to repository"
 
~

                  
 echo $LOGMESSAGE > $TEMPLOGFILE
~
echo $LOGMESSAGE > $TEMPLOGFILE
 $SVNREPOIMPORT . file://$REPOSDIR/$REPONAME
~
$SVNREPOIMPORT . file://$REPOSDIR/$REPONAME
 rm -rf /tmp/repolayout/
~
rm -rf /tmp/repolayout/
 rm $TEMPLOGFILE
~
rm $TEMPLOGFILE
 
~

                  
 #
~
#
 # リポジトリの設定ファイルのテンプレートをコピーする
~
# リポジトリの設定ファイルのテンプレートをコピーする
 #
~
#
 echo "copies repository configuration file"
~
echo "copies repository configuration file"
 cp $REPOSDIR/.svnserve.conf $REPOSDIR/$REPONAME/conf/svnserve.conf
~
cp $REPOSDIR/.svnserve.conf $REPOSDIR/$REPONAME/conf/svnserve.conf
 
~

                  
 echo "finished."
+
echo "finished."
+
}}

softwares/fedora/subversion/index.wiki.txt

current previous
0,0 1,139
-
${smdncms:title,Subversion}
-
${smdncms:keywords,Subversion,svnserve,xinetd,TortoiseSVN}
-

                  
-
*Subversion
-
バージョン管理システム[[Subversion:http://subversion.tigris.org/]]のインストール
-

                  
-
-関連するページ
-
--[[softwares/debian/inetd-svnserve]]
-
--[[softwares/subversion]]
-
--[[softwares/fedora/redmine]]
-
--[[softwares/svk]]
-

                  
-
**インストール
-
 # インストールされているか確認
-
 rpm -qi subversion
-
 
-
 # インストール
-
 yum install subversion
-

                  
-
**xinetd経由でsvnserveを起動する場合の設定
-
xinetd経由でsvnserveデーモンを起動させるための設定方法。 ここではローカルネットワーク内からのアクセスのみを許可する条件で設定を行う。
-

                  
-
まずsvnserve用のユーザを作成する。
-
 useradd svn
-
次に、リポジトリを格納するためのディレクトリを作る。
-
 mkdir /var/repos
-
 chown svn:svn /var/repos
-
xinetdの設定をするために、/etc/xinetd.d配下にsvnserveというファイルを作成し、下記のような内容を書き込む。
-
 service svnserve
-
 {
-
         disable         = no
-
         socket_type     = stream
-
         wait            = no
-
         user            = svn
-
         server          = /usr/bin/svnserve 
-
         server_args     = -i -r /var/repos
-
         log_on_failure  += USERID
-
         only_from       = 192.168.0.0/24 127.0.0.1
-
 }
-
設定項目の意味は次の通り。
-
:user|svnserveを実行するユーザ。
-
:server|svnserveへのフルパス。
-
:server_args|svnserveに渡す引数。 「-r /var/repos」でリポジトリのルートディレクトリを/var/reposに設定している。
-
:log_on_failure|接続に失敗した場合、ユーザ名をログに記録する。
-

                  
-
/etc/hosts.allowに下記の内容を追記し、内部ネットワークからの接続のみを許可する。
-
 svnserve : 192.168.0. 127.0.0.1
-
/etc/servicesを編集して、サービス名と使用ポート番号を追記する。 追加する位置は任意だが、「Unregistered but useful/necessary other services」のあたりに追加しておくとよい。
-
 #
-
 # Unregistered but useful/necessary other services
-
 # 
-
                :
-
                :
-

                  
-
 svnserve             3690/tcp                        # Subversion
-
 svnserve             3690/udp                        # Subversion
-
                :
-
                :
-
既に/etc/servicesに次のような記述があった場合は、svnをsvnserveに書き換えること。
-
                :
-
                :
-
 svn             3690/tcp                        # Subversion
-
 svn             3690/udp                        # Subversion
-
                :
-
                :
-
また、iptablesなどを使ってファイヤーウォールの設定がされている場合は、3690番のポートを忘れずに空けること。
-

                  
-
続いて、chkconfigコマンドを使ってsvnserveを起動できるようにする。
-
 # svnserveを起動するようにする
-
 chkconfig --add svnserve 
-
 
-
 # 設定が反映されているか確認する
-
 chkconfig --list svnserve
-
上記のコマンドを打ったあと、次のように表示されればOK。
-
 svnserve:       on
-
起動設定が整ったところで、xinetdを再起動する。
-
 service xinetd restart
-
telnetを使ってsvnserveに接続して次のように表示されればOK。
-
 # telnet localhost 3690
-
 Trying 127.0.0.1...
-
 Connected to localhost.localdomain.
-
 Escape character is '^]'.
-
 
-

                  
-
**リポジトリの作成・設定
-
まずはリポジトリを作る。 ここではsampleというリポジトリを/var/reposに作成する。
-
 # svnになる
-
 su svn
-
 
-
 # svnadminコマンドを使って
-
 svnadmin create /var/repos/sample
-
続いて、リポジトリのアクセス設定を行う。 リポジトリを作成すると自動的にconfディレクトリが作成される。 その中にsvnserve.confとpasswdの二つの設定ファイルを作成する。
-

                  
-
svnserve.confではアクセス設定などを行い、passwdではパスワードを設定することができる。 まずはsvnserve.confの設定例。
-
 [general]
-
 anon-access = none          # Anonymous(匿名)ユーザのアクセスを許可しない
-
 auth-access = write         # 認証済みユーザには書き込み権限を与える
-
 password-db = passwd        # パスワードファイルをpasswdとする
-
 realm = sample repository   # リポジトリの説明(適当でOK)
-
anon-access、auth-accessに設定できる値は次の三つ。
-
:none|アクセスを許可しない
-
:read|読み込み権限を与える
-
:write|読み込み、書き込みの両方の権限を与える
-

                  
-
つづいて、passwdの設定例。 「ユーザ名=パスワード」の形式で記述する。
-
 [users]
-
 santamarta=password
-
 hoge=hogehoge
-
passwdファイルの編集が終わったら、アクセス権限をsvnだけに設定して、他のユーザからアクセスできないようにする。
-
 cd /var/repos/sample/conf
-
 chmod 600 passwd
-
 chown svn:svn passwd
-

                  
-
#googleadunit
-

                  
-
*TortoiseSVN
-
[[TortoiseSVN:http://tortoisesvn.tigris.org/]]の使い方。
-
**TortoiseSVNで自動的に属性を着けるには
-
TortoiseSVNの設定ファイルを編集することで、ファイルをリポジトリに追加する時点で自動的に属性を付与させることができる。 これにより「$Date: 2010-04-07 19:42:39 +0900 (水, 07  4月 2010) $」などが自動的に日付に展開されるようになる。 また、拡張子からMIMEタイプを判断させるようにすることも出来る。 以下はその設定方法。
-

                  
-
まずエクスプローラ上で右クリックし、メニューからTortoiseSVN→Settingsの順に選択。 続いて出現する画面からGeneralを選択し、「Subversion configuration file」の横にあるEditボタン(赤い矢印の部分)をクリックする。
-
#ref(tortoisesvn_00.jpg,nolink,Subversion configuration file)
-
テキストエディタが開いて設定ファイルの内容が表示されるので、次の内容を書き込む。
-
 [miscellany]
-
 enable-auto-props = yes # 自動的に属性をつけるようにする
-
 
-
 [auto-props]
-
 *.cpp = svn:keywords=Id Date Rev Author # 拡張子が.cppの場合は、コミット時に
-
                                         # Id, Date, Rev, Authorの各キーワードを展開する
-
 *.h   = svn:keywords=Id Date Rev Author
-
 *.png = svn:mime-type=image/png         # 拡張子が.pngの場合は、MIMEタイプをimage/pngに設定する
-
 *.jpg = svn:mime-type=image/jpeg
-
 *.bmp = svn:mime-type=image/bmp
-
 *.psd = svn:mime-type=image/x-photoshop
-
 *.ico = svn:mime-type=image/x-icon
-

                  
-
この設定をした上で、たとえばファイル中に「$Id: 20091121-0537.diff.txt 696 2010-04-07 10:42:39Z smdn $」と書いておくと次のように展開されるようになる。
-
 $Id: 20091121-0537.diff.txt 696 2010-04-07 10:42:39Z smdn $
-
$Idのあとに続けて、順に「ファイル名、リビジョン番号、最終変更日時、最後に変更を行ったユーザ」の各値が展開される。