[svn] ひとつのリポジトリを分割して複数のリポジトリを作成する
svn を触わり始めた数ヶ月前にひとつのリポジトリを作成してみて以来,その中に複数のプロジェクトをつっこんでいました.しかし最近,なんだか都合が悪いように感じてきたため,プロジェクトごとにリポジトリを作成して管理することにしました.
大まかな手順としては,
- リポジトリの内容を,プロジェクトごとにダンプする.
- プロジェクト別に空のリポジトリを作成する.
- ダンプファイルを読み込む.
- 構成を調整する.
な感じです.
はじめに
既存のひとつのリポジトリ (これを R とし,パスは /repos) に 2つのプロジェクト project1,project2 があるものとします.
/repos # リポジトリ R のパス /repos/project1 # R 内の project1 のパス /repos/project2 # R 内の project2 のパス
(project1 は,2つのディレクトリ dir11,dir12 で構成されてるものとします.)
また,今回の目的であるプロジェクト別の 2つのリポジトリをそれぞれ R1,R2 とし,次のパスに作るものとします.
/newrepos/project1 # R1 のパス /newrepos/project2 # R2 のパス
リポジトリの内容を,プロジェクトごとにダンプする
リポジトリのバックアップには svnadmin dump を使ってますが,
% svnadmin dump /repos > repos.dump
とすると,R 内のすべての情報がダンプされてしまいます.
プロジェクトごとにダンプしたい場合,svndumpfilter を併用することで解決できます.
% svnadmin dump /repos | svndumpfilter include project1 > project1.dump ... % svnadmin dump /repos | svndumpfilter include project2 > project2.dump ...
プロジェクトごとに空のリポジトリを作成する
作成します.
% mkdir /newrepos # ディレクトリ /newrepos が存在しない場合 % svnadmin create /newrepos/project1 % svnadmin create /newrepos/project2
ダンプファイルを読み込む
svnadmin load を使って読み込みます.
% svnadmin load /newrepos/project1 < project1.dump ... % svnadmin load /newrepos/project2 < project2.dump ...
構成を調整する
この時点で,例えば,project1 の構成を確認すると,次のような結果が得られます.
% svn ls file:///newrepos/project1 project1/ % svn ls file:///newrepos/project1/project1 dir11/ dir12/
なんか 1つ余分にできてしまってます.
よさげな方法がなかった (知らなかった) ので,非スマートな手段で解決しました.
% svn mv file:///newrepos/project1/project1/dir11 file:///newrepos/project1 % svn mv file:///newrepos/project1/project1/dir12 file:///newrepos/project1 % svn rm file:///newrepos/project1/project1
せめて,複数のターゲットをまとめて mv できるといいんですが...
おわりに
こんな感じで,リポジトリを複数に分割してみました.
HTTP 経由でリポジトリにアクセスする用途な場合,Web サーバで設定されているユーザに su してから作業を行うべきでしょう.でないと,HTTP 経由での svn import とか svn commit とかコケます,多分.
参考リンク
本日の一語: ダンプ
(1)ダンプ-カーの略。
(2)コンピューターの記憶装置の内容を,プリンターやディスプレー装置などに出力すること。
ダンプ 【dump】 - goo 辞書
(1) も (2) も,概念的には同じってことですか.




![twitomonitor [ついともにた] twitomonitor [ついともにた]](http://www.iwa-ya.net/img/banner/twitomonitor.png)


