!!!Subversion {{category Subversion,nolink}}バージョン管理システムの一つ。 !!!Subversion サーバ (svnserve) 「svn://server-name/project-name/」と言った感じでのSVNサーバの作成メモ。 ※ (☆) の項目は確認でやっているので、やらなくてもいい。 !!Subversion のインストール [Apache Subversion|http://subversion.apache.org/] からリンクをたどって適当に…。 ってか、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を指定する。