ChangeLog というファイルは行なわれた変更内容を記録しておくためのものです。これは変更内容を一覧できる便利なファイルであり、そして、 cvs 管理されていない場合はおそらく唯一の詳細な変更記録です。ここで、このファイル自身を更新していく方法にはいくつかの流儀があります。
また、ChangeLog とは別に、commit するときには log を記述します。しかし、どちらも変更内容を記録するものなので、通常、どちらかの記述をもう一方にコピーして使います。
タグや日時を指定せずに co した場合、出てくる版は次のように決定されます。
通常、default branch の設定は import によってファイルが追加された時に行なわれ、そのファイルに commit したときに除去されます。また、cvs admin -b によって default branch を設定・除去できます。
cvs import は(-b で import 先の branch を指定しなかった場合)
import 時に conflict が存在すると表示されることがありますが、これは update 時の conflict とは意味が異なります。 import 時の conflict は単に(タグや日時の指定無しで)co したときに import したファイルが出てこないということを示しているだけです。これは次のような場合に起こります。
ファイルのパーミッションは RCS と同様に、読み込み・実行許可が RCS ファイルのパーミッションとして記録されます。書き込み許可は記録されません。
なお、パーミッションの履歴は管理されません。 cvs-1.10.8 の時点では PreservePermissions というものがあったのですが、 cvs-1.11 で無効になりました。
ssh を使用してサーバに接続した場合、
Warning: Remote host denied X11 forwarding, perhaps xauth program could not be run on the server side. Warning: Remote host denied authentication agent forwarding.
という警告が出る場合があります。これは、クライアントが X protocol や agent の中継を要求したのに、サーバがそれを禁止している場合におこります。 cvs ではそれらの中継は必要ないのでサーバがこれを禁止するのは適切ですし、そうでなくても ssh server のデフォルト設定がそうなっていることもあります。この警告を抑制するには中継を要求しないようにすればよく、これは次のような記述を ~/.ssh/config にすることで実現できます。
Host cvs.server.host ForwardX11 no ForwardAgent no
また、cvs サーバに(cvs アカウントとは別に)通常のアカウントを持っており、そちらでは中継を有効にしておきたい、という場合には、cvs サーバの(ssh 設定における)別名を作ります。
Host no-forwarding-cvs.server.host HostName cvs.server.host ForwardX11 no ForwardAgent no
このような設定をしておけば、 :ext:user@no-forwarding-cvs.server.host:/path/to/repository という CVSROOT を利用することによって、中継の要求を抑制することができます。
cvs サーバは一般にネットワークの先にあるわけですが、防火壁があってサーバに直接コネクションを繋げない場合があります。そのような場合でも、何らかの方法でサーバとの双方向通信路を確立することができれば動作させることができます。
(cvs でつかえる)防火壁を越えて通信路を確立する方法にはさまざまなものがありますが、結局は直接繋ぐかわりに途中に中継点を作り、そこのアプリケーション層で中継するということを行ないます。中継点を作る方法にはいくつかの種類があります。
中継点となるマシン上にアカウントがあり、 ssh を使ってそのマシンに login できる場合、さまざまな方法で中継を行なうことができます。また、cvs サーバに接続するコマンドを(非対話的に)起動して ssh client があたかも cvs サーバとして振舞うようにしてもいいですし、 port forwarding で通信路を確立することもできます。
なお、cvs サーバ自体に ssh プロトコルで接続しなければならない場合もありますが、その場合 ssh プロトコルをクライアント - サーバ間の通信路に載せることになります。つまり、その場合かならず ssh を使う必要がありますが、中継には(ssh 自体を含む)さまざまな方法が使えます。必ずしも ssh だけを使わなければならないということではありません。 ssh 自身は透過的な通信路を提供するものであり幾重にも重ねることができるので、どの段階の ssh を考えているのか混乱しないようにしましょう。
中継点となるマシンの管理権限がある場合、対象の cvs サーバに繋ぐ専用の中継機構を動かしておくという方法が使えます。この場合の中継は単純なものなので、 delegate の tcprelay, ucspi-tcp, inetd, socket(1)(pkgsrc), など、さまざまなツールが使えます。
ただし、複数の cvs サーバを扱う場合には、それらを区別する工夫が必要になります。このためには、複数の IP アドレスをつかったり、 pserver の場合には port を変えるなどの方法が使えます。ただし、pserver クライアントで port を変えるには cvs-1.11.1 以降が必要です。
これらの中継点を具体的にどのように設定し、動作させるかにはさまざまな方法があります。
cvs の ext メソッドは (デフォルトでは) rsh を起動し、サーバマシン上で cvs server というコマンドを実行することによってサーバとの通信路を確立するものです。ここで、CVS_RSH という環境変数の設定により、rsh 以外のコマンドも使うことができます。なお、この通信路を流れるデータは(認証無しの)cvs client/server protocol と呼ばれます。
結局のところ、cvs server として実行したコマンドとの双方向の通信路が確立できればいいので、通信路を確立する方法にはさまざまな方法をとることができます。
cvs の pserver メソッドは指定したホストの cvspserver(2401) port に接続しつ通信路を確立するものです。 pserver メソッドでは最初に認証をした後 cvs client/server protocol により、通信を行ないます。