理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> プログラミング >> CVS

CVS (Concurrent Versions System)の設定と利用法

基本的な使い方

  1. 使用上の注意点(日本語文字コードの問題)
  2. リポジトリを作成する (init)
  3. プログラムの登録 (import)
  4. プログラムソースの取得 (checkout)
  5. ファイルの編集結果を反映させる (commit)
  6. 新しいファイルを登録する (add)
  7. ファイルを削除する (remove)
  8. ファイルの更新履歴を見る (log)
  9. リポジトリからファイルを再取得する(update)
  10. リポジトリと同期する (update)
  11. 差分を見る (diff)
  12. 作業コピーを放棄して開発を中断する (release)
  13. ヘルプを表示

応用的な使い方

  1. CVSログから読みやすいChangeLogを生成する(cvs2cl.pl)
  2. 管理者権限が無い時にCVSクライアントをインストールする
  3. 無視するファイルを指定する

関連するページ


使用上の注意点

日本語文字コードに注意する。ソースコード中のコメントの文字コードと、cvs commit するときに付けるコメントの文字コードを合わせること。そうしないと cvs log で取り出したログの日本語が文字化けする。

リポジトリ(repository, 保管場所)を作成する (init)

% cvs -d /Users/Shared/cvsroot init

/Users/Shared/cvsroot/ の中に CVSROOT というディレクトリが作成される。この中には管理ファイルが作成されている。これ以降、このリポジトリを指定するのにはオプション -d を用いても良いが、次のように環境変数を設定しておくと便利である。

% setenv CVSROOT /Users/Shared/cvsroot

常に指定するなら .tcshrc(.cshrc) に記述しておく。

プログラムの登録 (import)

ある程度作成しているプログラムソースをCVSに登録する。登録フォーマットは以下の通り。

% cvs import -m "メッセージ" プログラム名 ベンダータグ リリースタグ

メッセージには、このプログラムの説明を書いておく。プログラム名はこのプログラムの名前など(Ex. myviewer)。ベンダータグはとりあえず作者名など(Ex. Tanaka)。リリースタグは、プログラムのバージョンなど(myviewer_1_0)。このコマンドによって登録されるファイル群はカレントディレクトリが対象になる。つまり ls コマンドを打って main.c 等がリストされる所でcvs importを実行しなければならない。

登録が終了すると /Users/Shared/cvsroot/myviewer の様にディレクトリが作成され、管理ファイルが出来ている。

プログラムソースの取得 (checkout)

登録したプログラムソースを取り出すにはcheckoutを用いる。

% cvs checkout myviewer

すると、ソースコードがカレントディレクトリにコピーされる。またソースコード以外にも CVS というディレクトリが作成されこの中に管理ファイルが入っている。

ファイルの編集結果を反映させる (commit)

ソースコードの一つ(例えば main.c)を編集したとする。この結果をCVSリポジトリに反映させたい。まず変更したファイルを確認する。

% cvs update

変更しているファイル名の頭に M が付く。変更したファイルを全てコミットするには

% cvs commit -m "メッセージ"

とすれば良い。特定のファイルのみコミットする時には、最後にファイル名を付ける。

メッセージを書く時には -m オプションに続けて書けば良いが、日本語で書きたいときや、長文になる時にはターミナル上では不便である。例えばメッセージのみ emacs で書きたいなら -m "メッセージ" はつけずに次に様にする。

% cvs -e emacs commit

もしくは環境変数 CVSEDITOR に emacs をセットしておく。-m, -e, CVSEDITOR のいずれも無い場合には EDITOR が参照され、それも無ければ vi が起動する。

新しいファイルを登録する (add)

始めに import して以降に新しいファイルを作成した時にはその事をCVSリポジトリに知らせる必要がある。例えば init.c を新しく作成したとする。cvs update をしてみると、

? init.c

と表示される。? は登録されていないファイルを示すマーク。このファイルを add コマンドでファイル追加を行う。

% cvs add -m "メッセージ" init.c

再度 update コマンドを実行すると ? が A に変わっているが登録はまだ済んでいないので、commitコマンドでコミットする。

% cvs commit -m "メッセージ" init.c

ファイルを削除する (remove)

ファイル削除のための remove コマンドを実行する前に、削除するファイルを作業領域からも削除しておく必要がある。例えば record.c を削除したいなら、

% rm record.c
% cvs remove record.c

updateコマンドで確認するとファイル名の頭に R が付いているのが分かる。CVSリポジトリに反映させるためにはコミットする必要がある。

% cvs -m "メッセージ" commit 

ファイルの更新履歴を見る (log)

あるファイルのこれまでの更新日時やメッセージなどを確認する場合には log コマンドを用いる。

% cvs log ファイル名

リポジトリからファイルを再取得する

あるファイルの編集を間違えてしまい、再度リポジトリから取得したい時には、まず作業領域から該当ファイルを消去する。そして update すれば良い。

% rm main.c
% cvs update main.c

リポジトリと同期する (update)

updateコマンドをそのまま実行してみる。

% cvs update main.c

もし、作業領域にある main.c より新しい main.c がリポジトリにあると、新しいものに更新される。従って作業領域にあるファイルを削除した後、update するとリポジトリのファイルが再度作業領域にコピーされる。ファイル名(ここでは main.c)を省略すると全てのファイルについて適用される。

リポジトリと作業領域のファイルの関係を知りたければ、

% cvs -n update

とする。オプション -n を付けると何も変更せずに、ファイルの状態だけを表示する。ファイルの先頭に付いている文字の意味は次の通り。

差分を見る (diff)

cvsに登録されているファイルと、現在編集しているファイルとの差分を確認したい時は、 diff コマンドを持ちいる。

%cvs diff ファイル名

作業コピーを放棄して開発を中断する (release)

historyコマンドを用いると現在までの動作を確認できる。

% cvs history
O 07/30 07:54 +0000 yamada myview   =pic=  /Volumes/HD/temp/*

頭にある O はチェックアウトしたと言うこと。つまりチェックアウトの情報は履歴として残されている。この履歴を消してしまうにはチェックアウトしたファイルを release する必要がある。

cvs release はソースファイルのあるディレクトリの一つ上で行う。つまり checkout した場所で release しなければならない。

% pwd
/some/path/myviewer
% cd ../
% cvs release myviewer

myviewer はプログラム名。作業領域のファイルを残さずに、同時に消し去りたい時には -d オプションをつけておく。

% cvs release -d myviewer

これを行う前にはコミット忘れが無いか確認しておく。

ヘルプを表示

CVSログから読みやすいChangeLogを生成する(cvs2cl.pl)

参考:Karl Fogel, Moshe Bar 著「CVS -- CVSによるオープンソース開発」pp.285

cvs2cl.pl は cvs log コマンドによって得られる変更ログを人に見やすい形にします。

さて、ダウンロードした cvs2cl.pl ファイルに実行権を与えます。

$ chmod 755 cvs2cl.pl

そのまま使用する場所に置いても良いのですが /usr/local/bin/ などに置くのも良いでしょう。著者は /Users/MYNAME/bin/ に置いてパスを通しています。

$ export PATH=/Users/MYNAME/bin:$PATH

パスを通すときに /Users/MYNAME/bin ではなくて ~/bin とすると問題が出ることがあるのでフルパスで指定しておく方が良い。実際に ~/bin で検索パスに追加するとコマンドの実行は出来るが which コマンドでは見つからない。

管理者権限が無い時にCVSクライアントをインストールする

参考:CVS: UNIX クライアントで sjis ⇔ euc 変換

CVSのクライアントだけでも使いたいときにはCVSをクライアントとしてmakeする。まず CVSのウエブサイトからソースを採ってくる。そしてサーバー機能無しで configureする。

$ ./configure --disable-server
$ make

makeが終わると src ディレクトリ内にcvs が出来ているのでこれを好きな場所に置いてパスを通しておく。これでCVSクライアントとして使える。

無視するファイルを指定する

コミット、インポート、リリース等の時に無視するファイルを指定するには以下の方法がある。

  1. アーカイブの CVSROOT/cvsignore ファイルに書く
  2. ホームディレクトリ内の .cvsignore ファイルに書く
  3. $CVSIGNORE 変数で指定
  4. -I コマンドオプションで指定
  5. 作業用コピー内の .cvsignore ファイルに書く

1→5の順に読み込まれる。リストにはファイル名を列挙する。?, * 等のワイルドカードが利用できる。5の作業用コピー内に置く時は .cvsignore 自身も無視するように書いておく。ファイルのいずれかに感嘆符(!)が書かれていると、感嘆符(!)以前に指定されたすべてのファイル指定を無効にする。