Subversion作業ログ

やっとの事新しい会社で開発用サーバを用意して貰えた。
せっかくなのでcvsじゃなくてsubversionを使うようにしてみた作業メモ。
ただのメモなので色んなことがバラバラに書いてある。
ついでにcvsも殆ど管理はしていなかった人間のメモなのでおかしいこともいっぱいありそう。

サーバ側でレポジトリ作成

%svnadmin create /home/repo/test

cvsの様にレポジトリのディレクトリを作成してそこにプロジェクトをインポートすると言うよりもプロジェクトごとにsvnadmin createでディレクトリを作っていく感じ?
svnserveプロトコルでのアカウント管理なんかがこのディレクトリごとに出来て便利。
あとやっぱりmoveが使えるのが激しく便利。

クライアントからsshで接続してプロジェクト(tools)をインポート

%svn import tools svn+ssh://192.168.0.1/home/repo/test -m "test tools"

サーバとクライアントが同一マシンの場合は"svn+ssh"を"file"に、svnserveプロトコルで接続する際には"svn"にするだけ。
http経由の時はapacheにmod_davを組み込んでWebDAV経由で宜しくやるらしいけどイントラだと必要無いか。

クライアントからsshで接続してプロジェクト(tools)をチェックアウト

%svn co svn+ssh://192.168.0.1/home/repo/test tools

サーバ側svnserve設定(svn独自認証で、UNIXアカウントとsshを使う場合は不要)

svnユーザを登録。
RedHat(WthiteBox)なので

/etc/xinetd.d/svnserveを作成
/etc/serviceに 3690 svnserve/tcp,udpを追加
repo/*/conf/svnserve.confを各種設定し、
repo/*/conf/passwdにユーザ/パスワードを設定

$Id$を有効にする

コード内に$Id$を記述して

%svn propset svn:keywords "Id" *.php
%svn commit *.php

で$Id$が適宜置換される

logファイルや設定ファイルを更新対象から外す

logsディレクトリ内の*.logファイルをsvnから無視するように設定

%svn propset svn:ignore "*.log" ./logs
property 'svn:ignore' set on 'log'

svn status -u でcvs update -nと同様にリポジトリ内での更新確認のみを行える。

update時にfileに対してconflictが起きた時は

file.mine
file.rOLDREV
file.rNEWREV
file

が出来て、.mineは自分のupdate前の作業中のもの
rOLDREVは自分がcommitする前のもの、rNEWREVは最新、で手でmergeしない限りはどれかをfileにコピーして

%svn resolved file

とすると勝手にファイルの掃除をして、解決してくれる

svn co の代わりにsvn exportを使うと管理情報(.svn/)無しにファイル郡として取り出せる。

納品時に使うと良い。