$ svn switch --relocate file:///repos file:///new-repos
リポジトリ内の異なるパスに再配置するならば
svn switch file:///repos/branches/x.x.x
$ svn switch --relocate file:///repos file:///new-repos
リポジトリ内の異なるパスに再配置するならば
svn switch file:///repos/branches/x.x.x
いままで常に個人プログラミングだったので,バージョン管理をしたことがなかった.
ので,あまりにも基本だが,Subversionでのバージョン管理の手法を調査してみた.
開発の段階に合わせてtrunk, branches, tagsというディレクトリを作成して管理する.
trunk: 最新のコード
branch: リリース用のコード 1.0.xとかの名称を付けて管理する
tag: 本番リリースのコード.branchが安定した時点で1.0.1とかして作成する.
http://svn.hoge.com/svn/repo/というリポジトリでapp/ディレクトリにあるコードを管理しようとする場合,
1. trunkに現在のコードをimportする
$ svn import http://svn.hoge.com/svn/repo/app/trunk -m 'initial import'
2. 登録したコードをworking/ディレクトリに取り出す
$ svn checkout http://svn.hoge.com/svn/repo/app/trunk working
3. branchを作成する
ある程度コードが安定してきたら,リリース用のブランチを作る
$ svn mkdir http://svn.hoge.com/repo/app/branches/
$ svn copy http://svn.hoge.com/repo/app/trunk \
http://svn.hoge.com/repo/app/branches/1.0.x
-m 'create a branches 1.0.x of app'
リリース時はtag/1.0.0といったディレクトリを作る.作り方はbranchと同様
4. 作業コピーをブランチに切り替える
$ svn switch http://svn.hoge.com/repo/app/branches/1.0.x
5. gonzuiにtrunkを登録する
gonzuiはrubyベースのコード検索エンジン.appのtrunkを,gonzuiに登録して検索可能にする
./gonzui-import --svn http://svn.hoge.com/repo/app/trunk app
前に書いたのはレポジトリが1つの場合の設定だった.
/var/svn/hoge, /var/svn/barといったように複数レポジトリがある場合は,dav_svn.confにSVNListParentPathを設定すると,http://hoge.com/svn/でリポジトリ一覧を表示できるようになる.
<Location /svn> DAV svn SVNParentPath /var/svn SVNListParentPath on </Location>
認証をかけたい場合は,dav_svn.authzを作成して,以下のようにAuthzSVNAccessFileの項目を設定する.
<Location /svn> DAV svn SVNParentPath /var/svn SVNListParentPath on AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd AuthzSVNAccessFile /etc/apache2/dav_svn.authz Satisfy Any Require valid-user </Location>
dav_svn.authzの書式は”[リポジトリ名:パス]”で設定するリポジトリを指定したうえで,”ユーザ名=[rw]”で各ユーザの権限を記述する.グループを指定する場合は”@グループ名”で指定する.
ユーザ名に*を指定すると任意のユーザを示すので,下の例はprivateはuser1が読み書きできるのみ.publicは誰でも読むことは可能,となる.ユーザ名はdav_svn.passwdと揃えること
[private:/] user1 = rw * = [public:/] user1 = rw * = r
けど,この形式でのアクセス制限をかけると,せっかくSVNListParentPath onにしたのに,http://localhost/svn/でレポジトリの一覧を見ることが出来なくなってしまう.
その場合は,dav_svn.authzを使わずにLimitExceptで制限する.下のようにすることによって読み込みは誰でもできるが,書き込みにはユーザ認証が必要になる.
<Location /svn>
DAV svn
SVNParentPath /var/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
1. apache2のsvnモジュールを入れる
# aptitude install libapache2-svn # a2enmod dav_svn
2. apache2経由で書き込めるように権限を変更.
$ chown -R www-data.www-data /var/svn/repos
ユーザディレクトリ以下にsvnディレクトリ入れてる場合は,所有グループの変更で対処する.
$ chown -R user.www-data /home/user/svn $ chmod -R g+w /home/user/svn
3. dav_svn周りの設定
dav_svn.confは以下のように変更する.
<Location /svn> DAV svn SVNPath /var/svn/repos </Location>
アクセスに認証をかけるなら,以下のようにする.
<Location /svn>
DAV svn
SVNPath /var/svn/repos
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
まずsubversionパッケージをインストールする.必須ではないが,subversion-toolsもインストールしておくと後で便利.
# aptitude install subversion subversion-tools
svnadminコマンドでリポジトリを作成する.今回は/var/svn/reposにリポジトリを作成することとする.
# mkdir -p /var/svn/repos # svnadmin create /var/svn/repos
リポジトリを,アクセスするユーザ(サービス)の権限に変更する.通常ならば自分の権限にすればいいが,今回はapacheで公開することを考えてwww-dataの権限にする.
# chown -R www-data.www-data /var/svn/repos