CVSサーバを新調して,リポジトリを移動したいときは,単純に CVSROOT ディレクトリごと新しい場所に移動すればよい.リポジトリのコンテンツは,保管場所とは独立である.
リポジトリを移動して問題になるのは,リポジトリにアクセスするクライアントの方である.例えば,$CVSROOT 環境変数を設定し直して,新しいリポジトリを指すようにしなければならない.これで,新しいリポジトリから,最新のコピーをチェックアウトすれば,今まで通り作業ができる.
もし,リポジトリにチェックインしていない作業用コピーが存在していて,その作業用コピーをそのまま使い続けたい場合,もう少し設定変更作業をする必要がある.リポジトリから作業用コピーをチェックアウトすると,作業用コピーの中に,リポジトリの位置を指す管理ファイルが作成される.各ディレクトリにある CVS/Repository と CVS/Root である.この2つのファイルが,移動前の古いリポジトリを指しているため,この作業用コピーの中で update コマンドをしてもリポジトリが見つからないというエラーが出るし,新しく移動したリポジトリにチェックインできない.すべての管理ファイルを修正して,リポジトリの位置を新しく指し直すツールとして cvsutils ツールに cvschroot というコマンドがあるが,かなり古いツールで,新しい管理ファイルのフォーマットには対応していない場合がある.
一番確実な解決法は,新しいリポジトリから,もう一度作業用コピーをチェックアウトして,そこにある CVS/Repository と CVS/Root ファイルを,古いリポジトリを指している作業用コピーの中の管理ファイルと置き換えてやればよい.以下,手順を示そう.
- 古いリポジトリを指した作業用コピーに移動する.filenames の中に,新しいものと置き換える必要がある管理ファイルの名前のリストを作成する.
$ find . -name Repository > filenames $ find . -name Root >> filename- 次に,新しいリポジトリから作業用コピーをチェックアウト.filenames を使って,新しいリポジトリを指す管理ファイルを tar アーカイブに納める.
$ cd (新しい利作業用コピーのディレクトリ) $ tar -cv --files-from filename > a.tar- 最後に,古い作業用コピーに移動して,a.tar を展開すればよい.
ようするに,リポジトリを移動したりバックアップを取る前に,必ず,作業用コピーで行った変更をコミットしておけば,こうした面倒な手続きを行わなくてもよいのである.