| ホーム >> | プログラミング >> | CVS |
基本的な使い方
応用的な使い方
関連するページ
日本語文字コードに注意する。ソースコード中のコメントの文字コードと、cvs commit するときに付けるコメントの文字コードを合わせること。そうしないと cvs log で取り出したログの日本語が文字化けする。
% cvs -d /Users/Shared/cvsroot init
/Users/Shared/cvsroot/ の中に CVSROOT というディレクトリが作成される。この中には管理ファイルが作成されている。これ以降、このリポジトリを指定するのにはオプション -d を用いても良いが、次のように環境変数を設定しておくと便利である。
% setenv CVSROOT /Users/Shared/cvsroot
常に指定するなら .tcshrc(.cshrc) に記述しておく。
ある程度作成しているプログラムソースをCVSに登録する。登録フォーマットは以下の通り。
% cvs import -m "メッセージ" プログラム名 ベンダータグ リリースタグ
メッセージには、このプログラムの説明を書いておく。プログラム名はこのプログラムの名前など(Ex. myviewer)。ベンダータグはとりあえず作者名など(Ex. Tanaka)。リリースタグは、プログラムのバージョンなど(myviewer_1_0)。このコマンドによって登録されるファイル群はカレントディレクトリが対象になる。つまり ls コマンドを打って main.c 等がリストされる所でcvs importを実行しなければならない。
登録が終了すると /Users/Shared/cvsroot/myviewer の様にディレクトリが作成され、管理ファイルが出来ている。
登録したプログラムソースを取り出すにはcheckoutを用いる。
% cvs checkout myviewer
すると、ソースコードがカレントディレクトリにコピーされる。またソースコード以外にも CVS というディレクトリが作成されこの中に管理ファイルが入っている。
ソースコードの一つ(例えば main.c)を編集したとする。この結果をCVSリポジトリに反映させたい。まず変更したファイルを確認する。
% cvs update
変更しているファイル名の頭に M が付く。変更したファイルを全てコミットするには
% cvs commit -m "メッセージ"
とすれば良い。特定のファイルのみコミットする時には、最後にファイル名を付ける。
メッセージを書く時には -m オプションに続けて書けば良いが、日本語で書きたいときや、長文になる時にはターミナル上では不便である。例えばメッセージのみ emacs で書きたいなら -m "メッセージ" はつけずに次に様にする。
% cvs -e emacs commit
もしくは環境変数 CVSEDITOR に emacs をセットしておく。-m, -e, CVSEDITOR のいずれも無い場合には EDITOR が参照され、それも無ければ vi が起動する。
始めに import して以降に新しいファイルを作成した時にはその事をCVSリポジトリに知らせる必要がある。例えば init.c を新しく作成したとする。cvs update をしてみると、
? init.c
と表示される。? は登録されていないファイルを示すマーク。このファイルを add コマンドでファイル追加を行う。
% cvs add -m "メッセージ" init.c
再度 update コマンドを実行すると ? が A に変わっているが登録はまだ済んでいないので、commitコマンドでコミットする。
% cvs commit -m "メッセージ" init.c
ファイル削除のための remove コマンドを実行する前に、削除するファイルを作業領域からも削除しておく必要がある。例えば record.c を削除したいなら、
% rm record.c % cvs remove record.c
updateコマンドで確認するとファイル名の頭に R が付いているのが分かる。CVSリポジトリに反映させるためにはコミットする必要がある。
% cvs -m "メッセージ" commit
あるファイルのこれまでの更新日時やメッセージなどを確認する場合には log コマンドを用いる。
% cvs log ファイル名
あるファイルの編集を間違えてしまい、再度リポジトリから取得したい時には、まず作業領域から該当ファイルを消去する。そして update すれば良い。
% rm main.c % cvs update main.c
updateコマンドをそのまま実行してみる。
% cvs update main.c
もし、作業領域にある main.c より新しい main.c がリポジトリにあると、新しいものに更新される。従って作業領域にあるファイルを削除した後、update するとリポジトリのファイルが再度作業領域にコピーされる。ファイル名(ここでは main.c)を省略すると全てのファイルについて適用される。
リポジトリと作業領域のファイルの関係を知りたければ、
% cvs -n update
とする。オプション -n を付けると何も変更せずに、ファイルの状態だけを表示する。ファイルの先頭に付いている文字の意味は次の通り。
cvsに登録されているファイルと、現在編集しているファイルとの差分を確認したい時は、 diff コマンドを持ちいる。
%cvs diff ファイル名
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
これを行う前にはコミット忘れが無いか確認しておく。
参考: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: UNIX クライアントで sjis ⇔ euc 変換
CVSのクライアントだけでも使いたいときにはCVSをクライアントとしてmakeする。まず CVSのウエブサイトからソースを採ってくる。そしてサーバー機能無しで configureする。
$ ./configure --disable-server $ make
makeが終わると src ディレクトリ内にcvs が出来ているのでこれを好きな場所に置いてパスを通しておく。これでCVSクライアントとして使える。
コミット、インポート、リリース等の時に無視するファイルを指定するには以下の方法がある。
1→5の順に読み込まれる。リストにはファイル名を列挙する。?, * 等のワイルドカードが利用できる。5の作業用コピー内に置く時は .cvsignore 自身も無視するように書いておく。ファイルのいずれかに感嘆符(!)が書かれていると、感嘆符(!)以前に指定されたすべてのファイル指定を無効にする。