[目次へ][3章本体へ][3.2へ][3.4へ] 最終更新:$Date: 2002/09/23 07:22:17 $
題名変更。
■■3.3 テストモジュールを登録してみる(import)
3.2節で書いたように、まずリポジトリにモジュールを登録しなければ始まりません。importコマンドを使って、テスト用のモジュールを登録してみましょう。【図3.3.1】がimportコマンドの書式です。
【図3.3.1】importコマンドの書式 ▼ cvs import [-d] [-k 展開方法] [-I 無視対象] [-m メッセージ] [-b ブランチタグ] [-W パターン動作] モジュール名 ベンダータグ リリースタグ... ▲
今の時点では、コメント記述のための-m以外のオプションは使いません。-kと-Wの2つのオプションについては、バイナリファイルを扱うのに必要なので4.2.5項で説明します。後のオプションについては、付録Cのコマンドリファレンスを参考にしてください。
3つの引数、モジュール名、ベンダータグ、リリースタグは必須です。まったく個人で新しいモジュールを作る場合は、最初のモジュール名はともかく、ベンダータグ(つまりモジュール作成者の識別子)とか、リリースタグ(つまり外部向けのリリースバージョン)に何をつけるのか悩んでしまいます。 筆者は、ベンダータグには、ネットワークでの自分のあだ名mikamamaを、リリースタグにはそのモジュールの最初のバージョンということで、hoge_1_0というように適当につけてます。よそのモジュールを自分のリポジトリに登録する場合にはもちろん、そのベンダータグ(例えば、GNUとか)とリリースタグ(GNU2_8_0とか)をつければよいわけです。
■■■3.3.1 空のモジュールを登録してみよう
はじめは、何もない状態からはじめる場合を考えてみましょう【図3.3.2】。
【図3.3.2】空のモジュールを登録する ▼ % mkdir cvstest % cd cvstest % cvs import -m "CVS Test" cvstest mikamama cvstest_0_1 No conflicts created by this import ▲
まず適当なディレクトリ「cvstest」を作りましょう【1行目】。リポジトリ以外の場所であれば、どこに作っても構いません。cvs が新しければリポジトリに置いたファイルは登録できないようですが、1.10.8以前だと登録できてしまい、結果としてちょと変なことになります。自分の作業領域がいいでしょう。なお、このディレクトリの名前に制限はありません。なんとなく、登録するモジュール名と同じ名前にしてますが、特に影響はありません。
次に、今出来たほやほやの空のディレクトリに移動し【2行目】、この何もない状態を新規モジュールとして、cvstestというモジュール名で登録します【3行目】。結果として、「 No conflicts created by this import(何の競合も起きませんでした)」というメッセージで特に問題も無く登録が終了すれば成功です【4行目】。ここで失敗するとすれば、CVSROOTの設定忘れか、リポジトリの書き込み許可が出てないといったことぐらいだと思います。
ここで、モジュールに対するコメントをオプション-mとその引数"CVS Test"で指定しています。このオプション-mで渡された文字列は、本来ならばファイルに対応する変更履歴に対象ファイルの説明文として、埋め込まれます。つまり、importコマンドで新しく開始された変更履歴のファイルには最初にこの文字列がメッセージとして埋め込まれることになるわけです。しかし、空の場合は、ディレクトリには記録できないので、このメッセージはどこかへ消えてしまって、無視されるようです。空のディレクトリでモジュール登録するのは邪道なのかもしれません。
登録が確認できたら、そのディレクトリ自体には用がないので、もとのディレクトリに移動し、消去してしまいましょう【図3.3.3】。どうせ空なんですし。
【図3.3.3】空のディレクトリは要らないよね…たぶん ▼ % cd .. % rm -rf cvstest rm: descend into directory `cvstest'? y rm: remove directory `cvstest'? y ▲
Caution!
importコマンド利用時の注意
登録するディレクトリに移動し、importコマンドを実行していますが、importコマンドはカレントディレクトリを対象とするので注意してください。うっかり、登録するファイル群が入っているディレクトリの1つ上のディレクトリで実行してしまうと、思ったような結果が得られません(いえ、以前うっかり/home以下を全部importしかけただけなんですけどね。とほほ)。
■■■3.3.2 空じゃないモジュールを登録してみよう
前3.3.1項では空のモジュールを登録することからはじめてみました。では、登録するディレクトリ中に、ファイルやディレクトリがあった場合にはどうすればよいでしょうか?
悩む必要はありません。同じように指定すればよいのです。カレントディレクトリ以下全てが再帰的に登録されます。【図3.3.4】のように適当にファイルとディレクトリを作成した、cvstest2というディレクトリを用意します。中には入れ子になったディレクトリとそれぞれのディレクトリにファイルが1、2個づつ入っています。
【図3.3.4】中身のある(でも意味はない)ディレクトリ ▼ % ls -RF .: dir1/ tmp1.txt tmp2.txt ./dir1: dir2/ tmp3.txt ./dir1/dir2: tmp4.txt ▲
相変わらずディレクトリの名前はどうでもいいんですが、モジュール名もcvstest2として登録してみます【図3.3.5】。
【図3.3.5】カレントディレクトリ以下を再帰的に登録する ▼ % cvs -d /home/cvsroot import -m "CVS Test 2" cvstest2 mikamama cvstest2_0_1 N cvstest2/tmp2.txt N cvstest2/tmp1.txt cvs import: Importing /home/cvsroot/cvstest2/dir1 N cvstest2/dir1/tmp3.txt cvs import: Importing /home/cvsroot/cvstest2/dir1/dir2 N cvstest2/dir1/dir2/tmp4.txt No conflicts created by this import ▲
コメントとして、-mオプションに"CVS Test 2"を指定してimportコマンドを実行してみます【1行目】。空のモジュールを登録したときと異なっているのは、わきゃわきゃと何かメッセージが出力されることです【2-7行目】。最後【9行目】の問題ありませんメッセージは同じですけどね。このメッセージを眺めてみると、頭に変な文字(N)をつけたファイル名(N cvstest2/tmp2.txt)とディレクトリを移動するメッセージ(cvs import: Importing /home/cvsroot/cvstest2/dir1)からなっているのが分かると思います。この文字はこのファイルを新規(New)に登録しましたという印です。
このように、途中まで作ったファイル群でも、CVSで管理したいなと思い立ったときには、いつでも登録することができます。なおそのようなときには、そのファイル群を適当に整理してから登録した方がよいでしょう。ファイルについては、後でremoveコマンドを使えば消去できますが、ディレクトリについてはそうはいきません。ディレクトリは一度作ってしまうと、基本的に消えないので、あらかじめ最低限にするようにしておきましょう。
また、それまでのファイルは消してしまわずに、どこかにまとめてバックアップしておいたほうがよいと思います。少なくとも、checkuoutして無事登録されたファイルが取り出せることを確認するまでは、そのままにしておきましょう。4.2.5項で説明しますが、特にバイナリファイルについては登録時に破壊されることもありますので注意が必要です。
■■■3.3.3 一体何が起こっているの?
この状態で、リポジトリ/home/cvsrootを覗いてみると、【図3.3.11】のようになっているはずです。
【図3.3.11】/home/cvsrootを覗いてみる ▼ % ls -RF /home/cvsroot /home/cvsroot: CVSROOT/ cvstest/ cvstest2/ /home/cvsroot/CVSROOT: Emptydir/ config editinfo,v modules,v taginfo checkoutlist config,v history notify taginfo,v checkoutlist,v cvswrappers loginfo notify,v val-tags commitinfo cvswrappers,v loginfo,v rcsinfo verifymsg commitinfo,v editinfo modules rcsinfo,v verifymsg,v /home/cvsroot/CVSROOT/Emptydir: /home/cvsroot/cvstest: /home/cvsroot/cvstest2: dir1/ tmp1.txt,v tmp2.txt,v /home/cvsroot/cvstest2/dir1: dir2/ tmp3.txt,v /home/cvsroot/cvstest2/dir1/dir2: tmp4.txt,v ▲
tmp1.txt,vなどと、おしりに「,v」のついたファイルが、そのバージョン情報を溜めていくファイルです。このファイルは、RCSファイルと呼ばれています。興味がある人は各作業の後で、該当する「,v」ファイルの中身を覗いてみてください。ひとつのファイルに色々な情報が押し込まれていて、それが作業の影響によって変化していく様子がわかると思います。また、-mで指定した文字列「CVS Test 2」は各「,v」ファイルの最初(というか、下から積んでいくので一番下の方ですが)に記録されています。確認してみてください。
ちなみに、リポジトリに置いたファイルを登録すると、元ファイルと,vファイルが混ざってかなりシュールな状態になりますので、しないようにしてください。
■■■3.3.4 WinCvsでモジュールを登録してみよう
WinCvsでモジュールを登録するには、メニュー[作成]→[インポート(import)...]を使用します。ただし、このメニューを選ぶ前に、インポートするフォルダ(ディレクトリ)をフォルダブラウザで選択しておく必要があります。また空のフォルダを登録することはできないので、ダミーでもなんでもファイルをひとつは用意しておかないといけません。
ということで、ダミーファイルをひとつ含んだフォルダC:\home\mika\wintestを作成し、フォルダブラウザのエクスプローラタブで選んでおきます【図3.3.6】。
【図3.3.6】まずフォルダを選択しておかないと

この状態で、メニュー[作成]を開くと、[インポート(import)...]が選べるようになっているはずです。ということで、選びます【図3.3.7】。
【図3.3.7】選べるようになってるかな?

と【図3.3.8】のようなインポートフィルタダイアログが出てくると思います。なんだかエラーとか言われてますが、一応状態がOKなのでいいでしょう。基本的にここでは、ファイルの種類がこれでいいか聞かれるだけです。今回はこのまま[続行]します。
【図3.3.8】なんか、変なダイアログが出てきたぞ…
すると、ようやくインポートの引数設定を行うダイアログが出てきます。ここで、モジュール名wintestt、ベンダー名mikamama、リリースタグwintest、ログメッセージとして"A CVS Test"を設定し、[OK]ボタンを押します。
【図3.3.9】ようやく引数の設定にたどり着いた。あと一息!
さてこれで、ダイアログは消えましたが、どうなったんでしょうか、アウトプット領域を見てください。ここに【図3.3.10】のようなメッセージが出力されているはずです。WinCvsがimportコマンドを使用して登録を行っている様子が分かります。無事にエラー無く(コード0で)終われば成功です。うまくいきましたか?
【図3.3.10】importコマンドが実行されてるかな? ▼ 'C:\home\mika\wintest' 内のファイルを調査しています... cvs import -I ! -I CVS -m "A CVS Test" wintest mikamama wintest (ディレクトリ C:\home\mika\wintest 内) N wintest/tmp1.txt No conflicts created by this import *****CVS はコード 0 で終了しました***** ▲
うまくいかない場合には、とくに[全般]タグのリポジトリの設定あたりが間違っている場合があります【図3.3.11】。確認してみてください。
【図3.3.11】

Column エクスプローラタブとモジュールタブ
で、できるわけなんですが…ちょっとややこしい話をしてみましょう。インポートの対象ディレクトリを選ぶところなんですが、実はモジュールタブでもできてしまいます【図3.3.12】。
【図3.3.12】 モジュールタブでも選択できるなぁ…
ただ、モジュールタブはエクスプローラタブとは機能が異なるため、この状態でインポートを実行すると、内部を調査するためのステップが発生します【図3.3.13】。ここで再度フォルダを選びなおす必要があります。モジュールタブはモジュールを見るためのもので、エクスプローラタブとは違うということがこのあたりに現れてはいるのですが、エクスプローラタブの機能が半端なこともあっていまいち釈然としない気はしますね。
【図3.3.13】 もう一段ステップが?
■■■3.3.5 まとめ
ここで、新規モジュール登録(import)の流れを整理しておきましょう。新しく自分のモジュールをリポジトリへ登録する場合には、次のような流れになります。
登録するファイルとディレクトリをtarget_dirへ整理 ↓ cd target_dir ↓ cvs import -m "メッセージ"モジュール名 自分の名前 リリース名 ↓ バックアップして消去 cd ..; tar cpf target_dir.tar target_dir; rm -rf target_dir
続く3.4節では、リポジトリに登録したモジュールを、自分の作業領域に取り寄せる作業をおこないます。リポジトリがローカルホストに存在していても、同じ作業が必要です。