CVSからプロジェクト(モジュール)を削除する

無断転載禁止 CVSからプロジェクト(モジュール)を削除する

プログラムバージョン管理ツールの変移

社内ではプログラムバージョン管理ツールはCVS(Concurrent Version System)、SVN(Subversion)、Git(Global Information Tracker(?))と時代とともに変化してきました。

今世の中ではGithubが大半を占めていると思います。stackoverflowが実施している使用調査では、実に93%がGitを使用している結果が出ていました。2023年の調査からは項目自体がなくなっていたところを見ると、既に調査するまでもない状態になっているようです。

stackoverflow Developer Survey 2022
[stackoverflow Developer Survey 2022] https://survey.stackoverflow.co/2022/#version-control-systems

CVSのプロジェクトを整理

以前社内でSVNに移行したものは全てGitへ移行していたのですが、当時SVNに移行しきれなかったプロジェクトはいまだ社内のCVS上に残っています。今回サーバーのディスク容量を削減する必要もあり、不要になったプロジェクトを削除することにしました。完全になくなってしまうので、作業前にプロジェクトを削除する旨を関係者へ連絡しておきましょう。

今回の方法は独自のやり方なのでご参考までに。CVSではプロジェクトのことをモジュールと呼んでいますが、便宜上プロジェクトで記述していきます。

CVSからプロジェクトの削除方法がわからない

ネットでCVSからプロジェクトの削除方法を探したのですが、なにぶんサービスが古すぎて情報がなかなか出てこない状況です。いくつかのサイトを参考にシンプルでやりやすい方法で削除することにしました。

結果を先に書くと、対象プロジェクトのディレクトリーを丸ごと物理削除する、で問題ありませんでした。今回は正しい方法ではなく、強引なやり方で削除を進めるため、自己責任で実施しました。

正しい方法で削除したいという方はオフィシャルサイトからドキュメントを読み進めることをおすすめします。

cvs – Concurrent Versions System
[cvs – Concurrent Versions System] https://cvs.nongnu.org/

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から削除する必要もないと思いますので、検証程度に実施することをおすすめします。