[目次へ][5章へ][5.2へ] 最終更新:$Date: 2002/09/09 04:04:55 $
XPの画像撮り直しひとまず終了。最後に付け足しあり…すんません。
■■5.1 個人環境を整えよう
■■■5.1.1 環境変数を設定しよう
■■■5.1.2 WinCvsと環境変数
■■■5.1.3 個人環境設定ファイルを設定しよう
■■■5.1.4 WinCvsと個人環境設定ファイル
■■5.1 個人環境を整えよう
個人環境を整えるためには、まず環境変数を整え、そのあとCVSの個人環境を設定する必要があります。ここでは、順に見ていくことにしましょう。なお、WinCvsでもこれらの環境設定は概ね同じです。そのことについても簡単に説明しようと思います。
■■■5.1.1 環境変数を設定しよう
リポジトリの初期化のところで、CVSROOTという環境変数を設定するという話をちょっとだけしました。この他にCVSが参考にする環境変数には、CVSREAD、RCSBIN、CVSEDITOR、CVS_IGNORE_REMOTE_ROOT、CVS_RSH、CVS_SERVER、CVSWRAPPERSという7つがあります。このうち、RCSBINは1.9以前のバージョンでしか使いません。そして、今の段階で設定して嬉しいのは、CVSEDITORだけです。CVS_RSHは、遠隔にあるCVSサーバを利用するときには、設定する必要が出てきます。これについては5章で説明します。ここでは、CVSEDITORの設定をしようと思います。
■■■■CVSEDITORって何のための環境変数?
前3章でimport、add、commitというコマンドに、-mというオプションをつけていたことを覚えていますか? -mはファイルの変更履歴の中にログメッセージとして埋め込まれる文字列を指定するためのオプションでした。このオプション、省略するとどうなるでしょう。やってみましたか?
importとcommitの場合には、「ログを入力しろ〜」と言わんばかりに何かエディタが立ち上がってくるはずです。ちなみに、addは立ち上がってきません。何故かは私はよく分かりません。CVS設計者がそう判断したんでしょうが、誰か知っていたら教えてください。
■■■■いきなりエディタが立ち上がってきたらどうしたらよいの?
UNIXがよく分からない人はびっくりしたかもしれませんね。多分viというエディタが立ち上がってくると思いますので、そのときは、:q!と続けて入力して終ってください。viの操作を知っている人は、何かログメッセージをつけてから終了しても構いません。ログメッセージをつけた場合にはそのまま、処理は続行されますし、ログメッセージをつけなかった場合には、どうするのかCVSが聞いてきます【図5.1.1】。
【図5.1.1】ログメッセージをつけなかったとき(commitの場合) ▼ Log message unchanged or not specified a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs Action: (continue) ▲
一番最初のメッセージは、「ログメッセージが変わっていないか、入力されてないよ」という意味で、次にユーザにどうするかきいて聞いてきます。ここで、ユーザはa、c、e、!の4文字から1文字を入力して動作を選択できます。aはabortつまり、処理(ここではcommitの処理)そのものをやめてしまいます。cはcontinueつまり、処理を続行します。eはeditつまり、もう一度エディタを起動してログメッセージ入力可能状態にします。!も処理を続行しますが、対象の中にディレクトリが含まれる場合の動作が、continueと異なります。continueは同じディレクトリに含まれるファイルには同じログメッセージ(ここではログメッセージ無し)を適用しますが、次のディレクトリに移るとまたエディタを起動し、ログメッセージ入力を促します。一方、!は残ったディレクトリに含まれるファイル全てに対して、同じログメッセージを適用し終ります。
ログメッセージの入力ができなかった人は、aで中断し、-mオプションでログメッセージを指定しなおすか、次で説明するようにエディタを指定してログメッセージを入力してください。もちろん、ログメッセージをつけたくなければ、cなり!で続行しても構いません。
■■■■立ち上げるエディタを変えられないの?
変えられます。viだと日本語が書けませんし他のエディタの方が使いなれているかもしれませんから、何か他のエディタを指定できると便利ですよね。もちろん、vi使いかつ英語でがんばってもらっても構いません。ソフトウェアのソースコードを世界中の開発者とCVSで共有するような場合には、ログも英語で書くのは当然ですが、そういう場合は少ないとは思います。
CVSは、どのエディタを立ち上げるか次の順で判断します。まず、全体にかかるオプションである-eでエディタが指定されていれば、それを起動します【図5.1.2】。-eオプションが指定されてなければ、環境変数CVSEDITORがセットされているかチェックします。CVSEDITORがセットされていれば、そのセットされたエディタを立ち上げようとします。CVSEDITORがセットされていない場合には、環境変数EDITORをチェックします。それもセットされていないようであれば、UNIXなら大抵入っているエディタviを起動しようとします。
【図5.1.2】オプション-eをつけてcommit ▼ % cvs -e emacs commit ▲
環境変数はセットしたくない、とか、環境変数EDITORや、CVSEDITORにemacsを指定しているが、都合によりviが使いたいなどというときには、-eで指定するようにするとよいでしょう。
■■■■CVSEDITORはどうやってに設定すればいいの?
環境変数CVSEDITORの設定法は、CVSROOTと同じようにします。たとえば、設定したいエディタをemacsとすると、シェルの系統によって次のように環境変数を設定します。
CSH系のシェルを利用している場合 setenv CVSEDITOR emacs SH系のシェルを利用している場合 CVSEDITOR=emacs; export CVSEDITOR
commitコマンドを-mをつけないで実行してみてください。指定したエディタが起動してきましたか?
ちなみに、環境変数にセットしたエディタがパスが違っているなど何らかの理由で起動できない場合には、思いっきり文句を言われます【図5.1.3】。
【図5.1.3】エディタの起動に失敗(commitの場合) ▼ cvs commit: cannot exec /usr/ucb/vi: No such file or directory cvs commit: warning: editor session failed Log message unchanged or not specified a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs Action: (continue) a ▲
この動作は、上でエディタで編集をおこなわないで終った時と同じですね。上での説明を参考に、aでやめるか、もしくはcまたは!で空のログメッセージを適用するか判断してください。
■■■5.1.2 WinCvsと環境変数
WinCvsでは、環境変数を用いるのではなく、内部で対応する設定項目を持っています。環境変数HOMEはCVS特有のものではありませんが、設定ファイルの置き場として指定が必要なので、設定項目があります。環境変数CVSROOT、CVS_RSH、CVS_SERVERには対応する設定項目があります。環境変数CVSEDITORは、内部のエディタが用意されているので必要ありません。環境変数CVSREAD、CVS_IGNORE_REMOTE_ROOT、 CVSWRAPPERSには、筆者の知る限りでは対応する設定項目がありません。
■■■■ 環境変数HOME
環境変数HOMEに対応するのは、メニュー[管理]→[設定]で出てくるダイアログの[WinCvsタブ]の下の「HOMEフォルダ(CVSパスワードの格納に利用)(H)」です【図5.1.4】。ここに存在するフォルダを指定しておいてください。リポジトリにpserverを指定すると設定を促されます。
【図5.1.4】 環境変数HOMEに対応する設定項目

■■■■ 環境変数CVSROOT
対応する設定項目は、[管理]→[設定(E)]で出てくる設定ダイアログの[全般タブ]の上の「CVSROOT(CVSリポジトリの場所)を入力(C)」です。いくつも書いておくことができます。消す方法がないのが難点(レジストリをいじらないとダメくさい)ですが…。
【図5.1.5】 環境変数CVSROOTに対応する設定項目

■■■■ 環境変数CVS_RSH
環境変数CVS_RSHに対応する設定項目は、[管理]→[設定(E)]で出てくる設定ダイアログの[ポート指定タブ]の下の「使用するrshを指定する(H)」です。この設定項目については、6.2節で詳しく説明します。
【図5.1.6】 環境変数CVS_RSHに対応する設定項目

■■■■ 環境変数CVS_SERVER
環境変数CVS_SERVERに対応する設定項目は、[管理]→[設定(E)]を選ぶと現われる設定ダイアログの[ポート指定タブ]のrshの指定の上にある「サーバ上の特定の位置のcvsを使用する(S)」です。この環境変数を設定することは滅多にないと思いますが。この環境変数については、6.2節で少々説明しています。
【図5.1.7】 環境変数CVS_SERVERに対応する設定項目

■■■5.1.3 個人環境設定ファイルを設定しよう
CVSの実行環境を個人毎に設定する設定ファイルには、.cvsrc、.cvswrapper、.cvsignoreの3つがあります。
■■■■.cvsrcファイル
UNIXでCVSを使用している人は、.cvsrcというファイルでコマンドにいつも付けるオプションを指定しておくことができます。これは、一般的な初期化ファイルと同様にホームディレクトリ(~/)に置きます。たとえば、前の節で説明したように、updateにいつもオプション-dと-Pをつけたければ、update -d -Pと書きます。また、releaseには-dをつけたいとすると、次の行にrelease -dと書くようにします。
【図5.1.8】.cvsrcの例 ▼ update -d -P release -d ▲
何らかの理由で.cvsrcの設定をコマンド実行時に無効にしたい場合には、cvs -f update ...のように-fオプションを指定します。なんで、-fなのかは知りません(なんでだろ)。上で設定した状態で、-fなしでの実行と-fを指定して実行した場合のreleaseコマンドの挙動の違いを見てみましょう。【図5.1.9】の3行目の出力が、-dオプションつきで実行した場合の(and delete)が含まれたメッセージであったのが、【図5.1.10】の3行目では-dオプションがつかない場合のメッセージに変わっているのがわかると思います。
【図5.1.9】-fなしで実行した場合 ▼ cvs release cvstest You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `cvstest': n ** `release' aborted by user choice. ▲
【図5.1.10】-fつきで実行した場合 ▼ cvs -f release cvstest You have [0] altered files in this repository. Are you sure you want to release directory `cvstest': n ** `release' aborted by user choice. ▲
■■■■.cvsignoreファイル
.cvsignoreという名前のファイルをホームディレクトリ直下に作成しておくと、その中に記述されたファイルは、updateコマンド実行時にカレントディレクトリなどいくつかのファイルをまとめて対象とした時に、CVSがチェック対象から外すようになります。
たとえば、TeXなどを使用している場合、texファイルをコンパイルすると、.aux、.dvi、.logというサフィックスのついたファイルが生成されます。こういうのがたくさん出てくるようになると、updateコマンドを実行すると一覧にずらずらと並ぶようになります。そうすると、これら作業上は意味のないファイルに埋もれて、他のファイルが見えにくくなってしまいます。このような場合に、特定のファイルを無視するようにするのが、.cvsignoreファイルの役割です。
ここでは、テストのために、色々とファイルを用意して、更新してみます【図5.1.11】。すると、test.tex, test.c, t.est.aux, test.dvi, test.logというファイルが?マークで表示されます。
【図5.1.11】色々ファイルを用意してみて更新 ▼ % ls -F CVS/ newdir2/ test.c test.log test.tex test2.txt~ dir1/ test.aux test.dvi test.o test2.txt tmp2.txt % cvs update cvs update: Updating . ? test.tex ? test.c ? test.aux ? test.dvi ? test.log cvs update: Updating dir1 cvs update: Updating dir1/dir2 cvs update: Updating newdir cvs update: Updating newdir2 ▲
なお、Cのソースコードをコンパイルすると生成される.oファイル、およびemacsのバックアップファイルである最後に~(チルダ)がついたファイルは、CVSでは始めからチェックしません。これらを、表示させるように設定するには、「それまでの設定を無効にする」記号である、「!」(エクスクラメーションマーク)を記述する必要があるます。では、.oおよび~のついたファイルを表示させるようにして、.aux、.dvi、.logファイルを無視するような.cvsignoreを書いてみましょう【図5.1.12】。
【図5.1.12】.oおよび~を表示させて.aux、.dvi、.logを無視するための.cvsignoreファイル ▼ ! *.aux *.dvi *.log ▲
test.auxでもhoge.auxでもマッチするようにワイルドカード*を使用してパターン*.auxというように指定しています。*.dvi、*.logも同様です。なお、ファイルのパターンの区切りは空白でなく改行でも構いません。読みやすさを優先するなら一行ずつに書いた方がよいでしょう。これを、~/.cvsignoreとして置いて、cvs updateを実行すると【図5.1.13】のようになります。さっぱりしましたね。
【図5.1.13】.aux、.dvi、.logは無視されたかな? ▼ % cvs update cvs update: Updating . ? test.tex ? test.c cvs update: Updating dir1 cvs update: Updating dir1/dir2 cvs update: Updating newdir cvs update: Updating newdir2 ▲
なお、管理ファイルの中にもcvsignoreというファイルがあります。中の書き方と、そこに書かれたファイルを無視するようになるのも同じです。違うのは、その影響がその個人環境下ではなくそのリポジトリを使用している全ての環境(他の人も含む)に影響することです。また、作業コピーの各ディレクトリ下にも同名の.cvsignoreを置くことができ、こちらも記述法・機能は同じですが、影響がそのディレクトリのみと狭くなっています。サブディレクトリには影響しません。無視したい対象ファイルがどの程度一般的か、その影響領域を考え合わせてどのファイルに設定するか考えてください。
■■■■.cvswrappersファイル
.cvswrappersというのは、CVSの入出力時のフィルタリング機能で、動作を指定するためのファイルです。具体的には、条件にマッチしたファイルがリポジトリから取り出されたり、戻されたりするときに、指定されたフィルタをそのファイルに対してかけるということをします。あるファイルに対して、フィルタをかけるというのは、要するに、なんらかの変換をするプログラムをそのファイルに対して実行する、という意味です。管理ファイルの中にも同じ役割をするcvswrappersというファイルがあります。書式も同じです。
現在この機能は使用を推奨されていません。そのうち無くなってしまうという話です。しかし漢字コード変換にはこの機能を使用しているので、Windowsマシン上のCVSクライアントとUNIXマシン上のCVSクライアントで、UNIXサーバ上のデータを共有して作業している人はこの設定が必要になることがあります。この設定方法については、第6章で説明します。
■■■5.1.4 WinCvsと個人環境設定ファイル
上の環境変数設定でHOMEの場所に指定したディレクトリに.cvsrcや.cvsignoreを置いておけば、基本的にそれが影響します。例えば、【図5.1.8】の.cvsrcをHOMEフォルダに置いたとして、releaseコマンドを実行してみましょう【図5.1.14】。
【図5.1.14】 releaseコマンドを実行
cvs release watchtest (ディレクトリ C:\home\mika\workcopy\ 内) You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `watchtest': *****CVS はコード 0 で終了しました*****
また、【図5.1.12】の.cvsigonoreをHOMEフォルダに置いて、置く前と置いた後を比べてみます。
【図5.1.15】 .cvsignoreを置く前
CVSのupdateコマンドとは微妙に出力が違います。それは*.o、*~がWinCvs上では無視されないからです。
【図5.1.16】 .cvsignoreを置いた後
なお、*.o、*~を無視するようにしたければ、.cvsignoreは【図5.1.17】のような書き方になります。
【図5.1.17】 *.oおよび*~を無視するための.cvsigonore ▼ *.o *~ ▲
これを置いて、最新の状態に更新すると、【図5.1.18】のようになります。
【図5.1.18】 *.oおよび*~を無視
ちなみに、メニュー[表示(V)]→[フィルタ(F)]→[無視されているファイルを表示(I)]【図5.1.19】または、フィルタバー
の無視ファイル表示アイコン
を利用すると、無視されたファイルが表示されるようになります。たとえば、【図5.1.18】の状態で、このメニューまたはアイコンを選ぶと、【図5.1.20】のように表示されます。
【図5.1.19】 [表示(V)]→[フィルタ(F)]→[無視されているファイルを表示(I)]メニュー
【図5.1.20】 無視されているファイルの確認ができる