入門 CVS Q&Aページ

最終更新日:$Date: 2002/11/11 02:22:12 $

[サポートページへ戻る]


はじめに

私の受けた質問でよくあるものや、見かけて載せた方がよさそうなものについて一覧を作成してみようかと思います。他の質問事項や回答におかしな点をみつけられましたら、cvssupport@mikamama.comまでメールをください。

[先頭へ戻る]

Q&A

Q1. モジュールが不要になりました。リポジトリ内から削除する方法はありますか?

Q2. p.69でimport直後の編集後に更新(update)するのは意味ないのではないですか?他の人がコミットしてるかもしれないからですか?

Q3. updateコマンドを実行したときに出力されるメッセージの頭の文字の意味はなんですか?

Q4. commitコマンドを実行したらStickyタグがついているというメッセージが出てコミットできませんでした。

Q5. update -rをした覚えはないのに、Stickyタグがついていました。これはどのようなときにつくのですか?

Q6. loginfoでコミットメールの設定をしましたが、pserverのユーザ名がメールに含まれません。どうすればいいでしょう。

Q7. キーワード展開で日時がUTCになってしまいます。JSTにする方法はありませんか?

Q8. ディレクトリ以下の各ファイルのリビジョンやタグ情報をそのままに、 ディレクトリ名を変える方法はありますか?

Q9. Windows環境でpserverのパスワードを生成する簡単な方法はありませんか?

Q10. Solaris7用のcvs-1.10をインストールしてpserverを設定しましたが、No CVSROOTと言われて接続できません。なぜでしょうか?


Q1. モジュールが不要になりました。リポジトリ内から削除する方法はありますか?

A1. コマンドとしてはありません。フリーウェアのソースなどをとってきて眺めただけなどのとき、消したくなることはありますね。そういう場合は、リポジトリ内から当該モジュールを削除してください。きれいさっぱりなくなります。

UNIXならば、cd $CVSROOT; rm -rf 該当モジュール、Winならフォルダをつかんでごみ箱へ。

なお念のため、ファイルおよびディレクトリの単なる削除のためにリポジトリ内から対応するRCSファイルおよびディレクトリを削除してはいけません。全ての履歴が失われてしまいます。履歴の保存が必要な場合には、リポジトリ内からのモジュールの削除は慎重に行ってください。(バックアップをとっておくのがお勧め)

[先頭へ戻る]


Q2. p.69でimport直後の編集後に更新(update)するのは意味ないのではないですか?他の人がコミットしてるかもしれないからですか?

A2. p.69で更新してみてるのは、updateコマンドが編集されたファイルをチェックしていることを見るためです。編集したファイルにはMが編集していないファイルは表示されもしません。もちろん、他の人と協同作業したり、自分の作業環境が家と職場というように分散している場合に編集前後に更新してみるのは非常に有効です。というのもいきなりコミットしてもコミットが失敗することがあるようになるからです。これは主に他の人(含む昨日の自分)がどこかでコミットした変更と自分の変更がコンフリクトしているときに起こります。更新してみると、C(Conflictの意)という表示になるファイルがあるはずです。そのようなときには慌てず騒がず、Cのついたファイルを編集してコンフリクトを解消してください。コンフリクトを解消する話については、p.186にちょびっとだけ書いてあります。

[先頭へ戻る]


Q3. updateコマンドを実行したときに出力されるメッセージの頭の文字の意味はなんですか?

A3. 各ファイルの状態を表します。各文字の意味はCederqvistマニュアルのコマンドリファレンスの中のupdateの項目に書いてあります。日本語訳を参考にしてください。

[先頭へ戻る]


Q4. commitコマンドを実行したらStickyタグがついているというメッセージが出てコミットできませんでした。

$ cvs commit -m "Sixth commit."
cvs commit: Examining .
cvs commit: sticky tag `1.3' for file `b1.c' is not a branch
cvs [commit aborted]: correct above errors first!

A4. update -Aで解除できます。

$ cvs update -A
cvs update: Updating . 

[先頭へ戻る]


Q5. update -rをした覚えはないのに、Stickyタグがついていました。これはどのようなときにつくのですか?

A5.  以下のようなときにつきます。

  1. checkoutコマンドの-rオプションでリビジョンを指定してチェックアウトしたとき
  2. updateコマンドの-rオプションでリビジョンを指定して更新したとき
  3. commitコマンドの-rオプションでリビジョンを指定して強制的にコミットしたとき

[先頭へ戻る]


Q6. loginfoでコミットメールの設定をしましたが、pserverのユーザ名がメールに含まれません。どうすればいいでしょう。

A6. 環境変数CVS_USERにpserverでのユーザ名が設定されるようです。例えばperlならば$ENV{CVS_USER}というようにして取り出して、メールに書き出すようにすれば良いでしょう。

例えばHeaderを作ってるところを以下のようにいじってみます。

# print out the log Header
#
# pserver user
my $cvsuser = $ENV{CVS_USER};
$logfh->print ("¥n");
$logfh->print ("****************************************¥n");
$logfh->print ("Date:¥t$days[$wday] $mos[$mon] $mday, $year @ $hour:" . sprintf(
"%02d", $min) . "¥n");
$logfh->print ("Author:¥t$cvsuser ($login)¥n¥n");

if ($mailfh) {
        $mailfh->print ("¥n");
        $mailfh->print ("Date:¥t$days[$wday] $mos[$mon] $mday, $year @ $hour:" .
 sprintf("%02d", $min) . "¥n");
        $mailfh->print ("Author:¥t$cvsuser ($login)¥n¥n");
}

と、以下のような出力が得られます。

Date:   Saturday March 23, 2002 @ 14:53
Author: grape (cvsuser) 

[先頭へ戻る]


Q7. キーワード展開で日時がUTCになってしまいます。JSTにする方法はありませんか?

A7. ありません。CVSオリジナルは全世界で分散開発するためのツールなので、そういうことはあまり考えられていません。CVS MLで[cvs-ml 1300]から議論されましたが、結論は出ませんでした。

[cvs-ml 1568]で樋口@raidwayさんがまとめてくださったものを一部転載します。

* 鯉江さんがlocaltimeパッチをいくつか作られていて、info-cvsにも 投げてます[cvs-ml 1303] [cvs-ml 1312] [cvs-ml 1316]

* が、標準サポートは当面無さそう[cvs-ml 1319]

* WinCVSごった煮版では、ファイル一覧の日付をlocaltime表示できる。
* WinCVSごった煮版の作者である山田さんが、cvs log|statusの日付 をlocaltime表示するパッチを作られてます[cvs-ml 1328]

[先頭へ戻る]


Q8. ディレクトリ以下の各ファイルのリビジョンやタグ情報をそのままに、 ディレクトリ名を変える方法はありますか?

A8. addコマンドでnewdirを追加、olddir以下のファイルをnewdirで再commitして、olddirをremoveコマンドで消すと、ディレクトリ名は変わりますが、各ファイルのバージョンおよびタグ情報が消えてしまいます。リポジトリに登録したディレクトリ構成のみを、変えるには他の方法をとる必要があります。

cvsコマンドでする方法はありません。マルチユーザ環境で開発しているのではなく、そのモジュールを把握しているのが自分だけであるような場合に良くやる方法は、リポジトリに行ってえいやと当該ディレクトリをリネームしてしまうことです。

たとえばCVSROOTが/home/cvsrootでモジュールがtestな場合、 test/olddirをtest/newdirにしたいとすると、

% cd /home/cvsroot/test
% mv olddir newdir 

というようにします。この後、手元の作業コピーの始末をつける必要があります。放っておくと色々文句を言われます。

一番簡単な処置は消してしまうことですが、ファイルの更新を忘れていたりして悔しいときには、同様にリネームした後CVS/Repositoryを編集して中に含まれるディレクトリ名を書換えるという手段も使えます。新しくチェックアウトしたところに旧ファイルをコピーしても良いです。

[先頭へ戻る]


Q9. Windows環境でpserverのパスワードを生成する簡単な方法はありませんか?

A9. 本書で挙げた方法のhtpasswdやperlを利用する方法は一般のWindowsユーザには敷居が高いようです。[Cygwin]を入れて使用するとそうでもないのですが、UNIX環境そのものになじめないかもしれません。ですので、以下の方法を挙げておきます。主にcvsntを使用するのでサーバがWindowsであるという場合のみになります。

CVS for NTにはpasswdコマンドが拡張されており、以下のオプションで$CVSROOT/CVSROOT/passwdファイルへのユーザの追加・削除・変更などに対応しているようです。

-a: ユーザを加える
-x: ユーザを無効にする
-X ユーザを削除する
-r realuser: システムのリアルユーザ(realuser)の別名とする
-R: システムのリアルユーザへの別名を削除する
-D domain: ドメインdomainのパスワードを利用する

cvs passwd [-a] [-x] [-X] [-r realuser] [-R] [-D domain] [username]

動作確認はバージョン1.11.3.1で行いました。

1.3からはcvsntを内蔵しているので、下のコマンド(ログ)領域で1に示したcvs passwdコマンドを打てば良いです。Phytonはインストールしなくてもいきました。

動作確認はWinCvs 1.3b8で行いました。

cvspwd2のファイルセパレータを処理して、コンパイルすればできるかも。…無理?

注:本書で挙げたcvspwd(http://members.nbci.com/dewwy/)はすでにリンク切れのようです

[先頭へ戻る]


Q10. Solaris7用のcvs-1.10をインストールしてpserverを設定しましたが、No CVSROOTと言われて接続できません。なぜでしょうか?

A10. Solaris7用のバイナリはおかしいようです。Solaris2.5用バイナリを使用するか、ソースコードから自分でビルド・インストールしてください。(2.5.1用、2.6用が大丈夫かどうか不明)

(怪しい):GNUcvs.1.10.SPARC.32bit.Solaris.7.pkg.tgz
(大丈夫):GNUcvs.1.10.SPARC.Solaris.2.5.pkg.tgz
ダウロード元:[http://sunsite.sut.ac.jp/sun/solaris-binaries/sparc/]

[先頭へ戻る]


Copyright ™2000 Mika Ohtsuki All rights reserved.