INDEX
Subversion
バージョン管理システムの一つ。
Subversion サーバ (svnserve)
「svn://server-name/project-name/」と言った感じでのSVNサーバの作成メモ。
※ (☆) の項目は確認でやっているので、やらなくてもいい。
Subversion のインストール
Apache Subversion からリンクをたどって適当に…。ってか、Windowsバイナリは複数あって違いがよくわからん。
C:\>svn --version
とやってバージョンが表示されるように、path を通しておく。
リポジトリの格納ディレクトリの作成
(複数の)リポジトリを置くディレクトリを作成する。
mkdir C:\SubversionRepository
テストリポジトリの作成 (☆)
テスト用に「test」と言ったリポジトリを作成する。
svnadmin create C:\SubversionRepository\test
コマンドを実行すると C:\SubversionRepository\test の下に conf や db と言った必要なファイルなどが作成される。
デーモンモードで起動 (☆)
デーモンモードで起動し SVN クライアントでリポジトリが見れるかテストしてみる。
svnserve --daemon --root C:\SubversionRepository
起動させたら、SVNクライアントからURLを「svn://localhost/test」としてアクセスしてみる。
終了するときは、 Ctrl+C で終了する。
Windows のサービスに登録
svnserve を Windows のサービスに登録し、起動時に実行されるように設定する。svnserve のフルパスが "C:\Program Files\svn\bin\svnserve.exe" の時、" はエスケープする。
sc create svnserve
binpath= "\"C:\Program Files\svn\bin\svnserve.exe\" --service --root C:\SubversionRepository"
displayname= "Subversion Server" depend= tcpip start= auto
サービスの説明も設定できるので、必要ならわかりやすい物を設定する。
sc description svnserve "Subversion svnserveベース サーバ"
サービスに登録しただけでは開始していないので、手動で開始する。
net start svnserve
Windows のサービスから削除
サービスが開始している場合は、手動で停止させる。
net stop svnserve
svnserve を Windows のサービスの登録から削除する。
sc delete svnserve
Subversion リポジトリ作成
リポジトリの作成
"svnadmin create" コマンドでリポジトリを作成する。実行すると必要なディレクトリなどが作成される。
svnadmin create C:\SubversionRepository\test
リポジトリのアクセス制御
リポジトリ内の conf\svnserve.conf を編集する。
- anon-access
- 認証なしでアクセスできる範囲設定。"write"(読み書き), "read"(読込のみ), "none"(不可) が指定できる。未指定時のデフォルトは、"read"。
- auth-access
- 認証されたユーザのアクセスできる範囲設定。"write"(読み書き), "read"(読込のみ), "none"(不可) が指定できる。未指定時のデフォルトは、"write"。
- password-db
- パスワードファイル。
- authz-db
- ディレクトリ・ファイル毎のアクセス制御ファイル。
- realm
- 認証時に表示される認証領域の名前。指定しなければリポジトリの UUID が表示される。
[general] anon-access = read auth-access = write password-db = passwd realm = My Test Repository
リポジトリのユーザ登録
リポジトリ内の conf\passwd にユーザ名とパスワードを登録する。パスワードファイルは設定ファイルの password-db で指定したもの、「ユーザ名=パスワード」の書式。
[users] testuser = testpass
慣例ディレクトリの作成
必須ではないが、SVNの慣例に習って /trunk /tags /branches を作成する。
svn mkdir --username testuser --password testpass svn://localhost/test/trunk -m "trunkの作成" svn mkdir --username testuser --password testpass svn://localhost/test/tags -m "tagsの作成" svn mkdir --username testuser --password testpass svn://localhost/test/branches -m "branchesの作成" svn list svn://localhost/test/
Subversion バックアップ
ホットコピー作成
他に利用されているかに関係なく、リポジトリの完全なコピーを作成します。
svnadmin hotcopy C:\SubversionRepository\test C:\SubversionRepository\testcopy
コピー先(testcopy)は存在して、中にファイルがあってはいけない。設定もコピーされる。
ダンプ・ロード
ダンプファイルの作成
svnadmin dump C:\WORKS\Temp\svnrepo\test > test.svn-dump
ダンプファイルのロード
svnadmin create testnew svnadmin load C:\WORKS\Temp\svnrepo\testnew < test.svn-dump
事前にロード先のリポジトリを作成しておく必要がある。設定などはロードされないので、改めて設定が必要。
Subversion フック・スクリプト
Subversion は、いくつかのタイミングで外部プログラムを実行できる。hooks ディレクトリにフックスクリプトのテンプレートファイルがある。PATH がクリアされて呼び出されるため、スクリプト内で呼び出すコマンドは絶対バスで呼び出す方が無難。
コミットログを編集可能にする
svn propset でコミットログを修正可能だが、ログの内容は上書きされてしまうため、初期設定の状態では変更出来ないようになっている。従って、編集を出来るようにするには、pre-revprop-change(.sh|.bat|.cmd) で編集を許可するようにする。また、ログの変更履歴は残らないため必要に応じてスクリプト内でログの内容を残す必要がある。
Windows の場合
リポジトリフォルダ\hook\pre-revprop-change.bat に以下のファイルを作成する。
@ECHO OFF
if "%5"=="M" (
if "%4"=="svn:log" (
exit 0
)
)
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
post-revprop-change の標準入力で変更前、pre-revprop-change の標準入力で新しいプロパティ値が渡されてくるらしいが、Windows のバッチファイルでどうやって受け取るんだろうか。UNIX系なら /dev/stdin で取得するか、read コマンドで1行ずつ読むことが出来るが。
SVNサーバの切り換え(再配置)
「svn://server-name/project-name/」と言った感じでの運用でSVNサーバを別のマシンに変えたときのメモ。
svn の switch コマンド
svn switch --relocate svn://old-svn-srv/project-name svn://new-svn-srv/project-name working-dir
TortoiseSVN の再配置
TortoiseSVN のメニューから再配置を選択して、変更先URLを指定する。
Eclipse (SVNプラグインなんだろう) の再配置
「SVNリポジトリーエクスプローラー」で対象のリポジトリを選択、右クリックメニューから「再配置」を選択して、変更先URLを指定する。
最終更新時間:2014年06月21日 22時53分12秒 指摘や意見などあればSandBoxのBBSへ。