トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Subversion/FrontPage

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へ。