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/