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) も,概念的には同じってことですか.
最近の閲覧数
- [emacs] Scalaの入門にあたってscala-modeを入れてみた
- [perl] Markdown記法をプラグインっぽく拡張できる「Text::Markdown::Pluggable」というモジュールを書いてみた
- SPEEDPLAY ZERO向けの穴あきクリートカバー「Keep On Kovers」が届いた
- [perl] Textile記法をプラグインっぽく拡張できる「Text::Textile::Pluggable」というモジュールを書いてみた
- [perl][php] Textile記法+GeSHiでシンタックスハイライトするためのText::Textile::Pluggableプラグインを書いてみた
- [perl] Image::Sizeで画像サイズを取得できないことがある件とその(アドホックな)対処方法
- MySQL-5.5.24 + mroonga-2.03 なビルドに失敗した件とそのアドホックな解決策
- [perl] Geo::Hex(というかGeo::Proj4)モジュールをインストールしようとしたらちょこっとつまずいた
- ローカルとかにインストールしたGitな環境のリモート先へpushする際の問題とかその対策とか
- 名古屋を離れます
最近のエントリ
- aquaさんと,はじめての自転車用サングラス
- AjaxZip2の郵便番号辞書データ更新処理を1ステップで実行するシェルスクリプトをこさえてみた
- AjaxZip2をちょこっと拡張してみた
- 東京散歩 〜東京駅,浅草寺,東京スカイツリー〜
- YAPC::Asia 2012 というお祭りに参加してきた
- [linux][mac]コマンドの依存ライブラリを確認する
- Homebrewでnginx_tcp_proxy_moduleつきのnginxを入れる
- crontab設定関連メモ
- 「smartcd」というものがあるみたい
- RedmineのアップグレードついでにRVM管理下のRuby+mod_passengerで動くようにしてみた
カテゴリー
タグ
-
actionscript
amon2
announce
bicycle
bookmarklet
cafe
cooking
cpan
della.js
dqwindowmanager
eating
elisp
emacs
event
git
gps
gtd
html
iphone
javascript
lifelog
linux
mac
mono
music
mylifehacks
mysql
mywebservice
neko
nicograph
onomichi
pc
perl
photo
plack
shellscript
study
svn
tool
travel
twitomonitor
twitter
wcan
windows
wordpress
最近のコメント
-
No Responses.
最近のトラックバック
-
No Responses.