CVS を試す

CVS の使い方がなんとなくわかってきたので、結構前に登録したままになってしまっている、某プロジェクトで実験をしてみる。CVS にはなにも入っていないので、試しにここにリポジトリを作成してみようというわけだ。
CVS に変更を加えるためには、ssh 経由でアクセスする必要があるらしい。そのためには、ローカルで秘密鍵/公開鍵のペアを作成し、サーバに登録する。まずここからしてどうやればいいのかがわからなかったのだけど、ssh-keygen で SSH1 用の秘密鍵/公開鍵(identity/identity.pub)を作成、ssh-keygen -t dsa で SSH2 用の秘密鍵/公開鍵(id_dsa/id_dsa.pub)を作成するらしい。作成した公開鍵は、アカウント管理で登録する。SSH1 用、SSH2 用の鍵を両方とも登録してもいいし、どちらかだけにしてもよい。使う方を登録すればいいようだ(とりあえず両方登録してみた)。
登録後、数分でログインできるようになるということなので、少し待ってからログインしてみる。Mac OS X で使用しているユーザ名と SourceForge.jp のユーザ名が異なるので、-l オプションでユーザ名を指定する。

% ssh -l username shell.sourceforge.jp

という具合だ(最初、SSH1 用の鍵だけを登録した場合にはこれではログインできず、何度やっても「Permission denied (publickey,keyboard-interactive).」というエラーばかりだった。SSH1 を使用する場合は、さらに -1 オプションを使用すればいいようだ)。すると、ssh-keygen で鍵を作成したときに指定したパスフレーズを入力するようにというメッセージがあらわれるので、入力。また、初めて接続するときには、サーバの RSA キーのフィンガープリントが表示され、接続してもよいかという確認が表示される(おそらく正しいサーバに接続しているかどうかここで確認せよということなのだろう)。確認して、問題なければ「yes」と入力して接続する。すると、このサーバが known hosts に登録され、次回以降はこの確認なく接続できるようになる。
接続することができたら、ファイルを転送したりすることができるようだけど、とりあえず、~/.ssh に先ほど登録した鍵が入っているかどうかだけ確認しておく。

$ ls -la .ssh/

とすると、authorized_keys というファイルが存在するのが確認できる。このファイルが、アカウント管理で登録した鍵の内容というわけだ(中身が気になるなら cat で確かめてみることができる)。

そういえば、CVS を試すとか書きながら、ここまで CVS の話がまったく出てきていない(汗)。ssh で接続できることを確認したら、exit でいったん抜ける。
以下は、Open Source Development With CVS に書かれている内容をそのまま実行しているだけのメモなので、詳細についてはそちらを参照のこと。
まずはおまじない。ssh 経由で CVS に接続するために、CVS_RSH という環境変数を設定する。私は C シェルを使用しているので、

% setenv CVS_RSH ssh

という感じで設定した。次に、何度もリポジトリを設定するのは面倒なので、CVSROOT 環境変数リポジトリを指定しておく。

% setenv CVSROOT :ext:username@cvs.sourceforge.jp:/cvsroot/projectname

という具合だ(ユーザ名とプロジェクト名は適宜読み替え)。
そうしたら、サーバにインポートしたいソースファイルのあるディレクトリに移動して、おもむろに

% cvs import -m 'message' projname vendortag releasetag

を実行する(メッセージは説明用の適当なメッセージを、プロジェクト名は適当なプロジェクト名を、vendortag と releasetag は適当に入力する。って、全部適当かい(汗))。すると、ssh でログインしたときと同じようにパスフレーズの要求があり、正しいパスフレーズを入力すれば、カレントフォルダにあるファイルやフォルダがすべてリポジトリに登録される。おお、なんかすごい。
インポートを行っても、ローカルにあるファイルはまだバージョン管理されていない状態のまま。バージョン管理を始めるためには、いったんリポジトリに登録したファイルを、チェックアウトしなければならないのだ。
ローカルのファイルをバックアップしておき、チェックアウトして新しいフォルダを作成する。チェックアウトは、

% cvs checkout projname

だ。これでバージョン管理ができる状態になった。では、現在どういう状態になっているのか、

% cvs status

で確認してみる。すべて最新の状態(Up-to-data)で、リビジョンは 1.1.1.1 となっている。なんとなく「スタートラインに立った」という感じかな。