=begin
= CVS の使い方 − 便利編
((::))
* 編集者: 森川靖大
* 最終更新: 2004/09/30 (森川靖大)
* 新規作成: 2004/09/30 (森川靖大)
((::))
((:
:))
((::))
Contents
<<< cvs-usage2.hindex.rd
((:
:))
((:
:))
以下は、ここまでに設定した cvs の便利な機能を紹介する。
最低限の設定および必要なコマンドについては
(())を参照のこと。
== 便利なワザ
=== 変更内容をチェック
==== 最新版からの変更点のチェック
自分が変更したものと cvs に登録されている最新版とを
比較する場合は、以下のように diff オプションを用いる。
例えば、check.pl の変更を調べる場合は以下のようにする。
$ cvs diff check.pl
patch(1) が読む context diff 形式にするには以下のようにする。
$ cvs diff -c check.pl
==== バージョン間での変更点のチェック
check.pl に関して、過去のバージョン 1.2 と 1.5 の変更点を
比較する場合には以下のようにする。
$ cvs diff -r1.2 -r1.5 check.pl
=== 今までの作業ログを見る
今までの開発の履歴を見るには log オプションを用いる。
ここで表示されるメッセージは commit 時の際に開発者が -m
オプションで書き込んだメッセージである。
$ cvs log check.pl
=== 過去のバージョンを復帰
過去の旧バージョンを復帰させるには以下のようにする。ただし、
バージョン番号が前に戻る事はないので注意すること。
内容は前のものに戻っても、バージョン番号は更に新しいものになる。
例えば、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 になる。
=== 削除したファイルを復帰させる
上記の手順を応用して、削除したファイルの復帰も可能である。
まず、復帰しようとするファイルの履歴を見てみる。
ここでは 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
=== タグをつける
開発が一段落したら、タグをつけて現在の開発状況のスナップショットを
とっておくと後々便利だろう。
タグをつけるにはプロジェクト (モジュール) のトップディレクトリに移動し、
以下のようにコマンドする。
$ cvs tag Release-4_1-2003_10_16
↑
タグ名 (ここでは, <バージョン名>-<日付>としている)
タグの付け方に関してはプロジェクト毎に決まり毎を作っておくべきであろう。
なお、タグは, 各プログラムにつけられるもので、
プロジェクトに付くものではないことに注意。
なお、タグの活用に付いては((<タグを調べる>))や(())
を参照せよ。
=== タグを調べる
どのようなタグがつけられているかは、格納されているファイルの
どれかを 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
:
=== export する
作業用コピーを作成するのではなく、完成したソフトウェアとして
リポジトリ内からプログラム群を取り出す場合、export オプションを用いる。
(この場合には、各ディレクトリに CVS ディレクトリが作成されない)。
ただし、export する際には「タグ」か「日付」を指定する必要がある。
==== タグで取得する
ここで gt4f90io というプロジェクト (モジュール)
をタグで指定して取得する。
$ cvs export -r Release-_1-2003_10_16 gt4f90io
==== 日付で取得する
また、日付で指定する場合には以下のような方法がある。
(まだあったはずだけど詳しくは((<参考資料 1 |URL:../index.htm#label:4>))を参照して頂きたい。)
$ cvs export -D "2003-11-11" gt4f90io
$ cvs export -D "4 days ago" gt4f90io
なお、最新版を取得したいのなら、「明日」の日付で
export を行うと良いだろう。
=== 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
== ちょっと危険なワザ
=== コミット後にログメッセージを変更する
本来、コミット時のログメッセージはコミットした後に
変更すべきではないが、どうしても変更したい場合などは
以下のようにすると良い。
以下の例では 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) メッセージに関しては変更履歴が残らないため、元々のメッセージを
完全に消去してしまう。
なるべく変更はおこなわない方が良いが、もしも変更しなければならない
事情が生じた場合は、プロジェクト全体にメールしてから変更するように
すべきであろう。
=== ディレクトリの改名と移動
(())からの抜粋である。
ディレクトリの改名と移動の普通の方法は section 通常の改名方法 で
説明されている ようにその中のそれぞれのファイルを改名もしくは移
動することです。それか ら section ディレクトリを削除する に説明
されているように `-P' オプショ ンを付けて取り出します。
本当にリポジトリの中身を変更してディレクトリを改名したり削除した
ければ、 次のようにしてください:
* ディレクトリを改名する前に、 ディレクトリの作業用コピーを取
り出している全ての人に、 その旨を知らせます。 次のステップ
に進む前に、彼等全員が変更内容を格納し、 作業用コピーを削除
しなければなりません。
* リポジトリ中のディレクトリを改名します。
$ cd $CVSROOT/parent-dir
$ mv old-dir new-dir
* CVS の管理用ファイルを修正します。 (例えばモジュール名を改
名する場合等)。
* 再び取り出して作業を続けられることを、 全員に知らせます。
誰かが作業用コピーを消さずに持っていた場合、 彼がリポジトリから消
されたディレクトリを削除するまで、 彼の発行する CVS コマンドは無
視されます。
ディレクトリを移動させるよりは、 ディレクトリ中のファイルを移動
させる方を推奨します。 ディレクトリを移動させれば、 ディレクトリ
名に依存している古いリリースを正確に復元する事は、 ほとんど不可
能になります。
((:
:))
=end