Path: katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 28 Nov 1994 00:51:32 GMT Organization: Software Research Associates, Inc.,Japan Newsgroups: sra.os.unix Subject: CVS bug list Distribution: sra CVS 1.3 について、man, info, FAQ を調べて、不具合や勘違ひしそうなとこ ろのリストを作つてみました。(漢字の話は、内部コード EUC の機械を假定 して考へました。) なになにできなゐ、これこれできなゐ、といふ文字ばかり眺めると negative な氣分になつてしまふが、自信をもつて CVS を使おう。 -- 渡邊克宏@四谷 旧仮名遣い理論的に美しいそうだが、腐った現代つ子の頭では結構つづれない。 CVS 1.3 の不具合リスト $Id: cvsbug,v 1.1 1994/11/28 00:20:13 katsu Exp katsu $ [BUG や、manual pages との相違について] cvs(1) には、cvs diff の引数は rcsdiff の引数を継承している旨の記述が あり、一方 rcsdiff(1) には、diff の引数がそのまま使える旨が書いてある。 しかし、2文字以上のオプションは cvs diff では使うことができない。 cvs commit は、remove されたファイルは commitinfo による commit 前検査 にかけない。 commitinfo で、引数つきのコマンドを実行できない。 cvs import や update のときに "-I !" option が正しく扱われず、"-I ! " としなければならない。(unofficial patch が存在する。) cvs import の時には、cvs import file1 dir1/file2 のように、ファイルと サブディレクトリ下のファイルを混在できない。 branch 内では cvs update -D が正しく動作しない。(メイントランク に対して -D を指定したかのような動作をしてしまう。) modules ファイル内の定義で、-a の右側に自分自身を含むような alias 定義 があった場合、checkout が無限に続いてしまって終わらない。 ファイル名にスペースを含むファイルは、cvs では扱うことができない。 タグ文字列(ベンダータグ、ブランチ等を含む)には、`$,.:;@ という文字や漢 字は使用できない。 [注意すべき仕様やあいまいな仕様について] ディレクトリの削除をすることはできない。 リンク、シンボリックリンク等をそのまま扱うことはできない。 cvs commit は、cvs add されたファイルに勝手にブランチタグをつけること はしない。このことは、特に、checkout -r, update -r などで取り出された ディレクトリ上のファイルについてもいえる。結果、ブランチ上にファイルを add するには、"cvs add file; cvs commit -r branchtag" のように commit に陽にブランチタグを指定する必要がある。 xxx が cvs add されたばかりのファイルだった場合、 "cvs commit -r 新ビジョン番号 xxx" によって、xxx に新しいリビジョン番号 をつけることはできない。(もちろんブランチタグをつけることはできる。) cvs checkout や cvs update の際に -D オプションを用いても、指定された 日付以前に cvs remove されたファイルも取り出されてしまう。cvs export, cvs patch も同様の振舞いをする。(-D のかわりに適当なタグを用いるべきで ある。) cvs import などは、ファイルのタイムスタンプを保存しない。 cvs log は、時刻を UTC で表示する。同様に、$Date$ などのキーワードは、 UTC の時刻で置換される。 cvs release の対象となるのはモジュールである。よって例えば、cvs checkout の時、引数としてモジュール名ではなく $CVSROOT からの path を 指定したり、-d で取り出すディレクトリ名を指定したりした場合、あるいは modules ファイルで alias が使われていた場合、取り出されたディレクトリ は cvs release することができない。 cvs status コマンド出力の File: フィールドは、ファイル名の先頭 17 文字 までを示してる。 cvs tag は history ファイルに履歴を残さない。 cvs update(checkout) は(make(1) のことを考えて)タイムスタンプをリポ ジトリ内のものに合わせない。 cvs update -j Tag は、Tag 以降 cvs add や cvs remove されたファイルに は無頓着である。update -j ... -j ... も同様である。 cvs update は、CVS で管理していないディレクトリの中は走査しない。この ことから、次の (a),(b)がいえる。 (a) cvs release -d は、cvs update と rm -r の組合せだといえる。よって、 cvs checkout などで取り出した working copy 内にユーザが新たにサブディ レクトリを作っていたとしても、(そしてそこにファイルが存在したとしても、) それが cvs add されていない限り、cvs release -d で警告なしに削除されて しまう。(この振舞いを変更する patch が存在する。) (b) cvs update では、自分の working directory の中のディレクトリやファ イルが全て本当にリポジトリに置かれているかどうかを確認できない。 cvs コマンドは Ctrl-C などで中途で中断が可能であり、その場合(import, tag, update などが中途で中断するのであるから) revision の一貫性などが 保たれないこともありえる。一方逆に、本当に中断したいと思ったとしても、 Ctrl-C を複数回打たなければならないことがある。 .cvsignore にディレクトリを指定して、そのディレクトリを CVS に無視させ ることはできない。