Title: CVS の使い方 − 便利編


    Contents


以下は、ここまでに設定した cvs の便利な機能を紹介する。 最低限の設定および必要なコマンドについては CVS の使い方 − 最低限編を参照のこと。

1 便利なワザ

1.1 変更内容をチェック

1.1.1 最新版からの変更点のチェック

自分が変更したものと cvs に登録されている最新版とを 比較する場合は、以下のように diff オプションを用いる。 例えば、check.pl の変更を調べる場合は以下のようにする。

$ cvs diff check.pl

patch(1) が読む context diff 形式にするには以下のようにする。

$ cvs diff -c check.pl

1.1.2 バージョン間での変更点のチェック

check.pl に関して、過去のバージョン 1.2 と 1.5 の変更点を 比較する場合には以下のようにする。

$ cvs diff -r1.2 -r1.5 check.pl

1.2 今までの作業ログを見る

今までの開発の履歴を見るには log オプションを用いる。 ここで表示されるメッセージは commit 時の際に開発者が -m オプションで書き込んだメッセージである。

$ cvs log check.pl

1.3 過去のバージョンを復帰

過去の旧バージョンを復帰させるには以下のようにする。ただし、 バージョン番号が前に戻る事はないので注意すること。 内容は前のものに戻っても、バージョン番号は更に新しいものになる。

例えば、gate-ip-apply ファイルをバージョン 1.35 に戻す場合、 以下の手順で作業を行う。(現在のバージョンを 1.37 とする)。

$ cvs -Q update -p -r 1.35 gate-ip-apply > gate-ip-apply
$ cvs commit -m "コメント" gate-ip-apply

以上の作業で gate-ip-apply の内容はバージョン 1.35 のものに戻り、 バージョン番号は 1.38 になる。

1.4 削除したファイルを復帰させる

上記の手順を応用して、削除したファイルの復帰も可能である。 まず、復帰しようとするファイルの履歴を見てみる。 ここでは rebirth.sh を復帰しようとしてみる。

$ cvs log rebirth.sh
          :
total revisions: 12;    selected revisions: 12
description:
----------------------------
revision 1.12
date: 2004/08/12 05:02:12;  author: foo;  state: dead; ...
Remove rebirth.sh.
----------------------------
revision 1.11
date: 2004/08/02 07:12:16;  author: foo;  state: Exp; ...
Add Special Ability.
          :

そして、最新版の revision ナンバーがいくつかを調べる。 ここでは最新のものが 1.12 であると分かる。 よって復帰の際には 1.11 のバージョンを指定する。 「最新の revision ナンバー」は消した際のものが当てはまるので、 指定しても何も帰ってこない。注意せよ。

$ cvs -Q up -p -r1.11 rebirth.sh > rebirth.sh

このようにすることで作業用コピー上に rebirth.sh のバージョン 1.11 が復帰する。後は add と commit を行なうと、新たなバージョン 1.13 の rebirth.sh が cvs に登録される。

$ cvs add rebirth.sh
$ cvs commit -m 'Return rebirth.sh' rebirth.sh

1.5 タグをつける

開発が一段落したら、タグをつけて現在の開発状況のスナップショットを とっておくと後々便利だろう。

タグをつけるにはプロジェクト (モジュール) のトップディレクトリに移動し、 以下のようにコマンドする。

$ cvs tag Release-4_1-2003_10_16
                     ↑
        タグ名 (ここでは, <バージョン名>-<日付>としている)

タグの付け方に関してはプロジェクト毎に決まり毎を作っておくべきであろう。 なお、タグは, 各プログラムにつけられるもので、 プロジェクトに付くものではないことに注意。

なお、タグの活用に付いてはタグを調べるexport する を参照せよ。

1.6 タグを調べる

どのようなタグがつけられているかは、格納されているファイルの どれかを log オプションで見ると分かる。 (タグを付けた際にそのファイルが無かったのなら、そのファイルに タグは付かないので注意。) 例えば、gtool4 というプロジェクトにおいてどのようなタグがつけられたか、 gtool_history.f90 というファイルを見て調べてみると以下のように表示される。

$ cvs log gtool_history.f90

  RCS file: /GFD_Dennou_Club/ftp/arch/gtool4/cvsroot/gtool4/src/gtool_history.f90,v
  Working file: gtool_history.f90
  head: 1.28
  branch:
  locks: strict
  access list:
  symbolic names:   <== これがタグを示すもの
          Release-1_0-2003_10_09: 1.28   
          dc_string-first: 1.6 <─┐↑
          isovst-last: 1.5   <──タグの数々
          start: 1.1.1.1  <────┘| 
          dcstaff: 1.1.1    <────┘
  keyword substitution: kv
              :

1.7 export する

作業用コピーを作成するのではなく、完成したソフトウェアとして リポジトリ内からプログラム群を取り出す場合、export オプションを用いる。 (この場合には、各ディレクトリに CVS ディレクトリが作成されない)。 ただし、export する際には「タグ」か「日付」を指定する必要がある。

1.7.1 タグで取得する

ここで gt4f90io というプロジェクト (モジュール) をタグで指定して取得する。

$ cvs export -r Release-_1-2003_10_16 gt4f90io

1.7.2 日付で取得する

また、日付で指定する場合には以下のような方法がある。 (まだあったはずだけど詳しくは参考資料 1 を参照して頂きたい。)

$ cvs export -D "2003-11-11" gt4f90io
$ cvs export -D "4 days ago" gt4f90io

なお、最新版を取得したいのなら、「明日」の日付で export を行うと良いだろう。

1.8 CVS オプションの省略形

cvs には、add、checkout、commit、diff、import、log、tag、update など といった数々のオプションがあるのだが、せっかちな人のために(?)これらに はさらに省略形が用意されている。ここでは、そのいくつかを紹介する。

正規         省略形
add          ad,  new
checkout     co,  get
commit       ci,  com
diff         di,  dif
import       im,  imp
log          lo,  rlog
remove       rm,  delete
tag          ta,  freeze
update       up,  upd

なお, 省略形に関しては, 以下のコマンドでその一覧を見る事ができる.

$ cvs --help-synonyms

2 ちょっと危険なワザ

2.1 コミット後にログメッセージを変更する

本来、コミット時のログメッセージはコミットした後に 変更すべきではないが、どうしても変更したい場合などは 以下のようにすると良い。

以下の例では install-prepare.htm というファイルのバージョン 1.4 へのコミット時のメッセージと install-prepare_en.html というファイルのバージョン 1.3 の時の ログメッセージを変更する。 複数ファイルを一度に変更することは不可能である。

$ cvs admin -m 1.4:"Change link about netCDF." install-prepare.htm
$ cvs admin -m 1.3:"Change link about netCDF." install-prepare_en.html

ただし、以下のことに注意すべきである。

  1. この変更に関しては "コミット" ではないので例えコミットメールを 出すような設定がされていても、誰にもメールされない。
  2. メッセージに関しては変更履歴が残らないため、元々のメッセージを 完全に消去してしまう。

なるべく変更はおこなわない方が良いが、もしも変更しなければならない 事情が生じた場合は、プロジェクト全体にメールしてから変更するように すべきであろう。

2.2 ディレクトリの改名と移動

<URL:http://www.linkclub.or.jp/~tumibito/soft-an/cvs/cvs-man/cvs-ja_7.html#SEC74>からの抜粋である。

ディレクトリの改名と移動の普通の方法は section 通常の改名方法 で 説明されている ようにその中のそれぞれのファイルを改名もしくは移 動することです。それか ら section ディレクトリを削除する に説明 されているように `-P' オプショ ンを付けて取り出します。

本当にリポジトリの中身を変更してディレクトリを改名したり削除した ければ、 次のようにしてください:

$ cd $CVSROOT/parent-dir
$ mv old-dir new-dir

誰かが作業用コピーを消さずに持っていた場合、 彼がリポジトリから消 されたディレクトリを削除するまで、 彼の発行する CVS コマンドは無 視されます。

ディレクトリを移動させるよりは、 ディレクトリ中のファイルを移動 させる方を推奨します。 ディレクトリを移動させれば、 ディレクトリ 名に依存している古いリリースを正確に復元する事は、 ほとんど不可 能になります。