CONTENTS
プログラムバージョン管理ツールの変移
社内ではプログラムバージョン管理ツールはCVS(Concurrent Version System)、SVN(Subversion)、Git(Global Information Tracker(?))と時代とともに変化してきました。
今世の中ではGithubが大半を占めていると思います。stackoverflowが実施している使用調査では、実に93%がGitを使用している結果が出ていました。2023年の調査からは項目自体がなくなっていたところを見ると、既に調査するまでもない状態になっているようです。
CVSのプロジェクトを整理
以前社内でSVNに移行したものは全てGitへ移行していたのですが、当時SVNに移行しきれなかったプロジェクトはいまだ社内のCVS上に残っています。今回サーバーのディスク容量を削減する必要もあり、不要になったプロジェクトを削除することにしました。完全になくなってしまうので、作業前にプロジェクトを削除する旨を関係者へ連絡しておきましょう。
今回の方法は独自のやり方なのでご参考までに。CVSではプロジェクトのことをモジュールと呼んでいますが、便宜上プロジェクトで記述していきます。
CVSからプロジェクトの削除方法がわからない
ネットでCVSからプロジェクトの削除方法を探したのですが、なにぶんサービスが古すぎて情報がなかなか出てこない状況です。いくつかのサイトを参考にシンプルでやりやすい方法で削除することにしました。
結果を先に書くと、対象プロジェクトのディレクトリーを丸ごと物理削除する、で問題ありませんでした。今回は正しい方法ではなく、強引なやり方で削除を進めるため、自己責任で実施しました。
正しい方法で削除したいという方はオフィシャルサイトからドキュメントを読み進めることをおすすめします。
CVSサーバーからプロジェクトの削除
CVSサーバーへログイン
まずはCVSサーバーにログインします。弊社のCVSサーバーはLinuxサーバーなので、ターミナルからログインします。基本はrootアカウントで実施します。個別アカウントごとで確認したい内容がある時は、別途ターミナルを開いて確認を行うとやりやすいです。
ログインアカウントのCVS環境の確認
まずはCVSの履歴を確認
cvs history
CVSROOTが設定されていないとエラーとなる。
cvs history
cvs history: No CVSROOT specified! Please use the `-d' option
cvs [history aborted]: or set the CVSROOT environment variable.
CVSROOTの設定。ログイン中のみ有効なため、必要に応じて.bashrcなどに追記しておくのもよい。
export CVSROOT=/各プロジェクトが置かれているディレクトリー
CVSの履歴確認
CVSROOTの設定ができたら、再度履歴の確認をします。
cvs history
O 2003-06-20 02:55 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
実に20年以上前の履歴が出てきました。
全プロジェクトの最新履歴確認もしてみます。-aを付与します。
cvs history -a
O 2003-06-20 02:55 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
O 2009-03-11 15:06 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
大量のプロジェクト履歴が表示されました。ほぼ2010年以前で更新がとまっています。
削除予定対象のプロジェクトを指定して履歴を確認。対象プロジェクトで操作しているアカウントの履歴が表示されます。
cvs history -m プロジェクト名
O 2005-09-08 08:13 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
O 2005-09-16 02:51 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
他アカウントも含めた履歴を表示する場合は-aを付与します。
cvs history -a -m プロジェクト名
O 2005-05-01 04:26 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
O 2005-09-08 08:13 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
O 2005-09-16 02:51 +0000 アカウント名 プロジェクト名 =プロジェクト名= <remote>/*
さらにログインアカウントの詳細な履歴を表示するには、全履歴を表示してgrepでプロジェクト名を指定する方法がありますが、大量に表示されるためおすすめできません。
cvs history -e | grep プロジェクト名
CVS履歴の削除
まずは履歴の削除を実施します。今回削除はhistoryファイルから直接削除を実施しました。historyファイルは本来cvs historyコマンドの操作が対象のため、推奨される操作ではありません。また、プロジェクト削除時に履歴は必ず削除する必要もなさそうです。
$CVSROOTの直下にCVSROOTというディレクトリーがあるので移動。$CVSROOTはエイリアスではなく直接フルパスを指定しても問題なし。
cd $CVSROOT/CVSROOT
historyファイルをバックアップ
cp -p history history.back
historyファイルから対象プロジェクトの履歴がある行数をカウント。今回対象となるプロジェクト名が普段使用しない文字列であったためこの方法で実施したが、重複しそうなプロジェクト名の場合は注意が必要。
historyファイルの全行数を表示
wc -l history
対象プロジェクトの行数を表示
grep プロジェクト名 history | wc -l
対象プロジェクトの文字列を含む行を削除
sed -i -e '/|プロジェクト名/d' history
対象プロジェクトの行数分削除されたか確認
wc -l history
CVSプロジェクトの削除
次にプロジェクトの削除。結果的にディレクトリーを物理削除するだけです。心配な場合は$CVSROOT以外の場所へバックアップを取得しておく。
cd $CVSROOT
必要に応じてバックアップを取得
cp -prf プロジェクト名 $CVSROOT以外の任意のディレクトリー/
プロジェクト(モジュール)の削除
rm -rf プロジェクト名
CVSからプロジェクトの削除完了
今回は対象プロジェクトが既に使用されていないプロジェクトであったため、強引に削除しました。特に必要がなければ、わざわざCVSから削除する必要もないと思いますので、検証程度に実施することをおすすめします。