-->

2012-11-04

subversionのインストール

http://www.gside.org/Gentoo/subversion/subversion.html
http://d.hatena.ne.jp/dayflower/20070604/1180941582
http://www.hyuki.com/techinfo/svninit.html#import
http://thinkit.co.jp/cert/article/0611/2/2/2.htm

subversionのインストール設定にapache2を追加して再インストールする。
$ grep subversion /etc/portage/package.use
dev-vcs/subversion      -dso perl apache2

apacheの設定にSVN,DAVを追加する。
$ grep ^APACHE2_OPTS /etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE"
APACHE2_OPTS="${APACHE2_OPTS} -D PHP5 -D PROXY -D EXTRACT_FORWARDED"
APACHE2_OPTS="${APACHE2_OPTS} -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS -D SSL -D SSL_DEFAULT_VHOST"

ディレクトリを作成する。
$ sudo mkdir -p /var/svn/repos

レポジトリを作成する。
$ sudo svnadmin create /var/svn/repos/repos001
$ sudo chown -R apache:apache /var/svn/repos/repos001/

apacheの設定に追加する。
$ rcsdiff /etc/config-archive/etc/apache2/modules.d/47_mod_dav_svn.conf,v /etc/apache2/modules.d/47_mod_dav_svn.conf
===================================================================
RCS file: /etc/config-archive/etc/apache2/modules.d/47_mod_dav_svn.conf,v
retrieving revision 1.1
diff -r1.1 /etc/apache2/modules.d/47_mod_dav_svn.conf
15a16,24
> <Location /svn/repos>
>        DAV svn
>        SVNParentPath /var/svn/repos
>        SVNListParentPath On
>        AuthType Basic
>        AuthName "Subversion repository"
>        AuthUserFile /var/svn/conf/svnusers
>        Require valid-user
> </Location>

Basic認証の設定をする。
$ sudo mkdir /var/svn/conf/
$ sudo htpasswd -c /var/svn/conf/svnusers admin

再起動する。
$ sudo /etc/init.d/apache2 restart

確認する。
http://192.168.xxx.xxx/svn/repos/
Collection of Repositories

    repos001/

Powered by Subversion version 1.6.17 (r1128011).

SSLのみ。
$ rcsdiff -u /etc/config-archive/etc/apache2/modules.d/47_mod_dav_svn.conf,v /etc/apache2/modules.d/47_mod_dav_svn.conf
===================================================================
RCS file: /etc/config-archive/etc/apache2/modules.d/47_mod_dav_svn.conf,v
retrieving revision 1.2
diff -u -r1.2 /etc/apache2/modules.d/47_mod_dav_svn.conf
--- /etc/apache2/modules.d/47_mod_dav_svn.conf  2012/11/03 14:40:53     1.2
+++ /etc/apache2/modules.d/47_mod_dav_svn.conf  2012/11/03 14:41:29
@@ -14,6 +14,7 @@
 #       Require valid-user
 #</Location>
 <Location /svn/repos>
+       SSLRequireSSL
        DAV svn
        SVNParentPath /var/svn/repos
        SVNListParentPath On

テスト。
import.
$ cd /tmp/
$ mkdir htdocs
$ cd htdocs/
$ echo "test001" >> a.txt
$ cat a.txt
test001
$ svn import http://192.168.0.110/svn/repos/repos001/htdocs -m "test001"
追加しています              a.txt

リビジョン 1 をコミットしました。

checkout.
$ cd /tmp/
$ mv -i htdocs/ htdocs.old
$ svn checkout http://192.168.0.110/svn/repos/repos001/htdocs htdocs
A    htdocs/a.txt
リビジョン 1 をチェックアウトしました。
$ diff -r htdocs.old/ htdocs
htdocsだけに発見: .svn

diff.
$ cd htdocs
$ echo "test002" >> a.txt
$ svn diff
Index: a.txt
===================================================================
--- a.txt (リビジョン 1)
+++ a.txt (作業コピー)
@@ -1 +1,2 @@
 test001
+test002
$ svn commit . -m "test002"
送信しています              a.txt
ファイルのデータを送信しています .
リビジョン 2 をコミットしました。
$ svn diff
$ echo "test003" >> a.txt
$ svn diff
Index: a.txt
===================================================================
--- a.txt (リビジョン 2)
+++ a.txt (作業コピー)
@@ -1,2 +1,3 @@
 test001
 test002
+test003

delete.
$ svn delete http://192.168.0.110/svn/repos/repos001/htdocs/a.txt -m 'test004'

リビジョン 3 をコミットしました。
$ cd /tmp/
$ svn checkout http://192.168.0.110/svn/repos/repos001/htdocs htdocs
   C htdocs/a.txt
リビジョン 3 をチェックアウトしました。
Summary of conflicts:
  Tree conflicts: 1
$ mv -i htdocs htdocs.current
$ svn checkout http://192.168.0.110/svn/repos/repos001/htdocs htdocs
リビジョン 3 をチェックアウトしました。
$ diff -r -q htdocs htdocs.current/
ファイル htdocs/.svn/all-wcprops と htdocs.current/.svn/all-wcprops は異なります
ファイル htdocs/.svn/entries と htdocs.current/.svn/entries は異なります
htdocs.current/.svn/text-baseだけに発見: a.txt.svn-base
htdocs.current/だけに発見: a.txt
$ svn checkout -r2 http://192.168.0.110/svn/repos/repos001/htdocs htdocs
A    htdocs/a.txt
リビジョン 2 をチェックアウトしました。
$ diff -r -q htdocs htdocs.current/
ファイル htdocs/.svn/all-wcprops と htdocs.current/.svn/all-wcprops は異なります
ファイル htdocs/.svn/entries と htdocs.current/.svn/entries は異なります
ファイル htdocs/a.txt と htdocs.current/a.txt は異なります
$ diff htdocs/a.txt htdocs.current/a.txt
2a3
> test003

よくわからないがdeleteしたファイル名は指定できなかった。
たぶんコマンドの内容がおかしい。
普通はコマンドではなくエディタの機能を経由とかで使うので復活方法を把握しとけばOK.
$ svn copy http://192.168.0.110/svn/repos/repos001/htdocs/a.txt a.txt
svn: パス 'http://192.168.0.110/svn/repos/repos001/htdocs/a.txt' がリビジョン 4 に見つかりません
$ svn copy -r2 http://192.168.0.110/svn/repos/repos001/htdocs/a.txt a.txt
svn: パス '/svn/repos/repos001/!svn/bc/4/htdocs/a.txt' が見つかりません
$ svn copy -r2 http://192.168.0.110/svn/repos/repos001/htdocs/ htdocs
A    htdocs/a.txt
リビジョン 2 をチェックアウトしました。
A         htdocs

ファイルシステムは?
たぶん安全性を取るとfsfsが良い。
しかしどこか壊れているのに大丈夫なつもりで使い続けるほうがまずそう。
$ svnadmin create --help | grep "fs-type"
  --fs-type           : リポジトリ形式: 'fsfs' (デフォルト) または 'bdb'

バックアップは?
1日1回やって古いのは消すとか。cron,logrotateとか。
$ tar cvzf varsvn.tar.gz /var/svn/

0 件のコメント: