リポジトリのツリーを別のリポジトリに移す方法

以下の段階を踏めばOK。

  1. ダンプ
  2. フィルター
  3. 移動先のフォルダを用意する
  4. ロード
  5. フォルダ移動

エクスプローラで自由自在に移動、というわけにはいかない。必要な部分を選んで、移動先とファイルがごちゃごちゃにならないように移して、最後にフォルダを整える、といった感じか。
詳細は以下に。

その1 ダンプ

移動元のリポジトリをダンプ。

svnadmin dump repos > repos.dump

その2 フィルター

リポジトリの一部のフォルダのみを移動したければ、フィルターをかけます。

svndumpfilter include /trunk/app --drop-empty-revs --renumber-revs  > app.dump(2011/04/21修正)
svndumpfilter include /trunk/app --drop-empty-revs --renumber-revs  > app.dump < repos.dump

--drop-empty-revs はフィルタをかけたために空になったリビジョンを取り除く。
--renumber-revs はフィルタをかけた後に残ったリビジョンに番号をふりなおす。
意味のないリビジョンを作らないためにも、このオプションはつけた方がよい。

その3 移動先のフォルダを用意する

移動先のリポジトリを用意し、ダンプを読み込んでもエラーが出ない様に必要なフォルダを作成する。

上記の例ではreposリポジトリの/trunk/app以下のフォルダを移動しようとしている。
そのために、svndumpfilterでフィルターをかけたのだが、その時点でダンプから/trunkフォルダを作成した情報が失われているため、移動先のリポジトリに/trunkが無ければ作成しておく。

その4 ロード

ダンプした結果を読み込みます。

svnadmin load newrepos < app.dump

ロードするフォルダを指定したいときは、--parent-dir を使用すればよい。
上記の例では、

svnadmin load newrepos --parent-dir newdir < app.dump

newreposリポジトリのnewdirの下にtrunk/appが作られる(newdir/trunkが無いなら作っておく必要あり)。

その5 フォルダ移動

ロードまでの段階では、移動したいフォルダを自由自在に動かすことはできないので、必要ならこの段階で動かす。