この文書は Mets-CVS の利用に関するガイドである。この文書ではバージョン管理の概念、中でも CVS についてよく知っていることを前提としている。特にあなたが CVS で作業した経験があり、Cederqvist のマニュアルを読んでいることを。原則的に、Meta-CVS は CVS とは独立したバージョン管理ツールとして理解され得るものであるが、実際には CVS を知るのに役に立つ。特に Meta-CVS が比較的新しいソフトであることと、ユーザーから完全に CVS を隠蔽することを意図していないことがその理由である。
またここでは Meta-CVS のインストールに成功していることを前提にしている。インストールするには INSTALL ファイルを参照のこと。
Meta-CVS がどのようにあなたのデータの代理を務め、どのように働くかの理解を得たければ、Meta-CVS-PAPER を読んでほしい。
Meta-CVS は CVS の記法に慎重に似せたコマンド記法を持っている。通常、Meta-CVS のコマンドはこのような外見をしている。
mcvs [ mcvs-options ] command [ command-options ] [ arguments ]
ほとんどのオプションは、妥当なものであれば単純に CVS へと渡される。今のところ例えば
mcvs -z3 update -A
が実行されたときには -z3 と -A オプションが CVS へと渡されるだろう。つまり CVS はこのように呼ばれることになる。
cvs -z3 update -A
このオプションの透過は CVS に慣れているユーザーにとって Meta-CVS の利用を簡単にしてくれるし、Meta-CVS のより深い部分の取り回しを簡単なものにもしてくれる。
すべてのオプションが CVS に渡されるわけではなく、Meta-CVS 独自のものもある。Meta-CVS を CVS オプションのインテリジェントフィルタの実装として考えてほしい。例えば `mcvs --version' と起動するときには `cvs --version' が呼ばれてほしくはないだろう。同じように `mcvs -Q' と起動したら CVS をサイレントで操作するのと同じように Meta-CVS にも動いてほしいだろう。だから -Q は Meta-CVS でも CVS でも同じように扱われるべきなのである。
Meta-CVS の出力は読みやすさに問題がある。謎めいた F から始まる名前が CVS の生成結果として出現する。このことが、どのファイルが出力結果に属するものなのかの理解を妨げている。このため Meta-CVS はフィルタリングコマンド(`mcvs filt')を持っている。これは謎めいた名前をカットし、マップされたパスに置き換えるためにパイプで使うことができるものである。例えば
mcvs diff | mcvs filt
は人間に読みやすい diff を生成する。
フィルタは F- のプレフィックスに続くきっちり 32 桁の16進数に一致する文字列の並びを探することで機能する。このような並びが MAP-LOCAL ファイルにマップされていたら、マッピングにしたがって置換される。一致しない場合やマップされていない場合はそのままである。F- から始まるファイルは 32桁の16進数の並びのあとに拡張子も持っている。これは正確に拡張子に一致するはずである。
Meta-CVS のモジュールを作る唯一の方法は存在するファイルのセットか、空っぽのディレクトリを持っていることである。そして最上位のディレクトリで create コマンドを叩く。
mcvs create <module-name> <release-tag>
<module-name> は呼び出したいモジュールを識別するためのもので、これは最上位のディレクトリと同じ名前である必要がある。あとでモジュールをチェックアウトするときにはこの名前を指定しなければいけないだろう。そしてデフォルトではその名前のディレクトリが作成される。
<release-tag> は新たに作成されたファイルのリビジョンに付与される象徴的なリビジョンである。これはこの最初のベースラインをかつて参照しなければいけない事態になったことがあれば有用だろう。
(!) CVS のベンダーブランチは Meta-CVS では機能しないことに注意してほしい。mcvs の create 操作はそれぞれ固有の新しいファイルセットを作成する。したがって同じ Meta-CVS モジュール上での複数の import は CVS と同じようには動作 *しない* だろう。同一モジュール上では決して mcvs create を実行してはいけない。Meta-CVS は CVS ベンダーブランチより優れた機能を持っている。これは ``mcvs grab'' というコマンドで、通常のブランチ上でスナップショットを取り、rename されたファイルの操作を行うものである。
あなたのファイルツリーが拡張子を持つ名前のファイルを含んでいたら、Meta-CVS は拡張子のリストを集め、テキストエディタを起動するだろう。この情報を編集し、保存してエディタを終了してほしい。これはそれぞれのファイルタイプでの CVS キーワード展開モードをセットする機会をあなたに与えるものである。この関連付けは Lisp の連想リストの形で表現されている。例えばファイルツリーに C のソースとヘッダファイルが含まれているなら、このような感じのものを目にするだろう。
(("c" :DEFAULT) ("h" :DEFAULT))
これはリストのリストになっている。それぞれ下位のリストは2つの要素を持っている。1つの文字列はファイルの拡張子を表しており、1つは Lisp のキーワード(コロンのあとに ID)を表している。このキーワードはそのタイプのファイルをどのように扱うかということを意味しており、単純にこのキーワードを編集するだけである。このファイルの先頭に、どのキーワードが使えて、どの CVS 展開モードが対応するのかを説明した有用なコメントがある。
Meta-CVS は空のディレクトリはまったく保存しないことに注意してほしい。この振る舞いは CVS と違い微妙なやり方である。CVS では、空のディレクトリ構造を作成して import することができる。対応する構造が CVS リポジトリ内に作られだろうし、その構造を check out することができる。(-P オプションで prune を指定するか本当にそのディレクトリを削除してしまわない限り。)Meta-CVS 環境下において、ディレクトリは複数のパス名から成るファイルシステムの加工品として扱われる。2つのファイルが、共通のパス部分を持つという美徳によって同じディレクトリに現れる。このことはディレクトリは2つのファイルが存在するからという理由だけで存在しているということである。Meta-CVS-PAPER を参照のこと。
したがって、もし空っぽの新しいプロジェクトを作りたい場合は複数の階層を持つディレクトリツリーを作成するなんて面倒なことはしなくていい。サブディレクトリを持たない1つだけの空っぽのディレクトリを作成し、その中で mcvs create を実行するだけである。あとでディレクトリを追加するのは簡単だろう。Meta-CVS では add コマンドは -R オプションをつければ再帰的に実行できる。これは CVS でディレクトリは1つずつ add し、あとで複数のファイルを add する必要があるのとは異なる。Meta-CVS の add コマンドは create コマンドのときのように新しい拡張子を識別し、それらをどのように扱うのか編集するようにあなたに促す。