[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プロジェクトの最中では、よく新しいファイルを追加します。削除や改名、も しくはディレクトリも同様です。心に留めておく総合的な概念は、元に戻せな い変更をする代わりに、存在するファイルの修正のように、CVS に変更 が発生したという事実を記録させたい、ということです。CVS でこれを する厳密な機構は状況に依り異ります。
7.1 ディレクトリにファイルを加える | ||
7.2 ファイルを削除する | ||
7.3 ディレクトリを削除する | ||
7.4 ファイルの改名と移動 | ||
7.5 ディレクトリの改名と移動 |
ディレクトリにファイルを加える手順を説明します。
ディレクトリの作業コピーが必要です。See section ソースの取得.
ディレクトリの作業コピーの中に、 新しいファイルを作ります。
`cvs add filename' を用いて、 バージョン管理に加えたいファイルを CVS に伝えます。 ファイルがバイナリ・データを含んでいる場合には、 `-kb' を指定して下さい (see section バイナリ・ファイルの扱い)。
`cvs commit filename' を用いて、 実際にリポジトリにファイルを格納します。 この手順を行なうまでは、他の開発者はファイルを見ることができません。
add
コマンドは、
新しいディレクトリを加える場合にも使用します。
他のほとんどのコマンドと異なり、
add
コマンドは再帰的に動作しません。
`cvs add foo/bar' とタイプすることさえできません。
代りに、
次のようにする必要があります。
$ cd foo $ cvs add bar |
-k
kflag] [-m
message] files …
files が加えられた事をリポジトリに伝えます。
add
で指定するファイルやディレクトリは、
現在のディレクトリに存在している必要があります。
新しいディレクトリ階層の全てをリポジトリに加える場合は
(例えばサード・パーティーからのファイル等)、
代りに import
コマンドを使用した方が良いでしょう。See section import--CVS にソースを取り込む, ベンダー枝を使用.
内容を commit
で格納するまで、
ここで加えたファイルは実際にはリポジトリに置かれません。
remove
コマンドで削除されたファイルに対して、
commit
を発行する前に add
を実行した場合、
remove
が無効になります。
例は See section ファイルを削除する.
オプション `-k' には、 このファイルを取り出すときの置換モードを指定します。 詳細は 置換モード 参照。
`-m' オプションには、ファイルの説明文を記述します。
(ログ情報を記録する設定ならば)この説明文が
ファイル `history' に記録されます (see section ファイル history)。
またファイルを格納する際、リポジトリの履歴ファイルにも記録されます。
この説明文は log
コマンドの出力で確認できます。
変更するには `admin -t' を用います。See section admin--管理.
フラグ `-m description' を省略した場合、
空の文字列が使用され、説明を記述するように促されることはありません。
例えば、以下のコマンドでファイル `backend.c' が リポジトリに加えられます:
$ cvs add backend.c $ cvs commit -m "Early version. Not yet compilable." backend.c |
加えたファイルは、作業中の枝だけに加えられます (see section 枝とマージ)。 他の枝にも加えたい場合は、後でマージすることができます (see section ファイルの追加や削除もマージできる)。
ディレクトリは変わります。 新しいファイルが加えられ、古いファイルが削除されます。 しかし、モジュールの古いバージョンの、 正確なコピーを復元できるようにしておきたいと思うでしょう。
ここでは、モジュールからファイルを削除した後も、 古いバージョンの復元を可能にする手順を説明します:
未格納の修正がファイルに残ってないことを確認する必要があります。
確認方法は See section 差分を見る.
また status
や update
といった
コマンドを使用しても確認できます。
修正を格納せずにファイルを消した場合、
当然ですが以前の状態に復元することはできません。
モジュールの作業コピーからファイルを削除します。
例えば、rm
などを使っても良いでしょう。
ファイルを本当に削除するという意思を CVS に伝えるために、 `cvs remove filename' を使います。
リポジトリからファイルを実際に削除するために、 `cvs commit filename' を使います。
ファイルの削除を格納する場合、CVS は、
ファイルがもう無いという事実を記録します。
ファイルが他の枝に存在していても良いし、
後で別のファイルを同じ名前で加えても構いません。
checkout
や update
に指定する
オプション `-r' や `-D' に応じて、
CVS が正しくファイルを作成したり、しなかったりします。
ファイルが削除された事実をリポジトリに伝えます (作業ディレクトリから未削除のファイルは処理されません)。 このコマンドを実行しても、リポジトリのファイルは、 削除が格納されるまで実際には削除されません。 オプションの完全な一覧は CVS コマンドの簡単な便覧 を参照してください。
以下に、幾つかファイルを削除する例を挙げます:
$ cd test $ rm *.c $ cvs remove cvs remove: Removing . cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m "Removed unneeded files" cvs commit: Examining . cvs commit: Committing . |
利便性のために、`-f' オプションを指定することでファイルの削除と
cvs remove
を一度に行うことができます。例えば、上の例はこのよう
にすることもできます:
$ cd test $ cvs remove -f *.c cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m "Removed unneeded files" cvs commit: Examining . cvs commit: Committing . |
ファイルに remove
を実行したけれど、
格納前に気が変わったのなら、add
コマンドを用いて、
簡単にファイルを復活させることができます。
$ ls CVS ja.h oj.c $ rm oj.c $ cvs remove oj.c cvs remove: scheduling oj.c for removal cvs remove: use 'cvs commit' to remove this file permanently $ cvs add oj.c U oj.c cvs add: oj.c, version 1.1.1.1, resurrected |
remove
コマンドを実行する前に失敗に気付いた場合、
update
コマンドを用いてファイルを復活できます:
$ rm oj.c $ cvs update oj.c cvs update: warning: oj.c was lost U oj.c |
削除したファイルは、作業中の枝だけから削除されます (see section 枝とマージ)。 他の枝からも削除したい場合は、後でマージすることができます (see section ファイルの追加や削除もマージできる)。
概念上では、ディレクトリの削除はファイルの削除と似ています--現在の作 業ディレクトリからそのディレクトリを消したいけれど、ディレクトリが存在 した古いリリースも取得できるようにしたい、と思うでしょう。
ディレクトリを削除する方法は、その中の全てのファイルを削除することです。
ディレクトリ自身は削除しません。そうする方法はありません。代わりに、
cvs update
, cvs checkout
, cvs export
に `-P'
オプションを指定して、作業ディレクトリから空のディレクトリを削除するよ
うにします。おそらく最良の方法は常に `-P' を指定することです。空
のディレクトリが欲しければ、削除されないように、ダミーファイルを作って
ください (例えば、 `.keepme')。
checkout
と export
の `-r' と `-D' のオプショ
ンでは `-P' が暗黙に含まれていることに注意してください。この方法
により CVS は正しくディレクトリを作ることができ、又、取り出した特
定のバージョンのそのディレクトリにファイルがあるかどうかに左右されなく
なります。
ファイルを他のディレクトリに移動したり、改名したりするのは、 難しくはありません。 しかし、難解な方法でこれを実現するものがあります。 (ディレクトリの移動と改名は、 より困難です。See section ディレクトリの改名と移動.)。
以降の例では、 old というファイルを new に改名します。
7.4.1 通常の改名方法 | ||
7.4.2 履歴ファイルを移動する | ||
7.4.3 履歴ファイルをコピーする |
ファイルを移動する通常の方法は、 old を new にコピーして、 普通の CVS コマンドで old をリポジトリから削除し、 new を加えることです。
$ mv old new $ cvs remove old $ cvs add new $ cvs commit -m "Renamed old to new" old new |
これがファイルを移動する最も単純な方法であり、
間違いがなく、この操作の履歴も記録されます。
このファイルの履歴を利用する際、
古い名前か、新しい名前のどちらかを指定して、
履歴のどの部分が欲しいのか知らせなくてはいけません。
例えば、cvs log old
を実行しても、
改名が行なわれた時までのログ情報しか得られません。
new が格納される場合には、 リビジョン番号は普通は 1.1 から再び始まります。 それが嫌ならば、格納時にオプション `-r rev' を用いると良いでしょう。詳しい情報は リビジョンの割当て を参照 してください。
この方法は、リポジトリ中のファイルの移動を含むため、 さらに危険です。 この節を全部読んでから実行して下さい。
$ cd $CVSROOT/dir $ mv old,v new,v |
利点:
変更の記録が完全に保たれる。
リビジョン番号に影響がない。
欠点:
リポジトリから、古いリリースを簡単に復元できない。 (改名される以前のリビジョンでもファイルの名前が new になる。)
ファイルがいつ改名されたかの記録がない。
ファイルの移動の最中に、 誰かが履歴ファイルにアクセスした場合、酷いことが起きる。 あなたがファイルを移動させている間は、 誰にも CVS コマンドを発行させてはいけません。
この方法も、リポジトリ中のファイルの移動を含みます。 欠点が無い訳ではありませんが、安全です。
# リポジトリ中の RCS ファイルをコピーする $ cd $CVSROOT/dir $ cp old,v new,v # 以前のファイルを削除する $ cd ~/dir $ rm old $ cvs remove old $ cvs commit old # new の全てのタグを削除する $ cvs update new $ cvs log new # 枝でないタグ名を思い出す $ cvs tag -d tag1 new $ cvs tag -d tag2 new … |
タグを削除することで、 以前のリビジョンを復元することができます。
利点:
リビジョンの取得に `-Ddate' を使わないで、 `-rtag' を使う限り、以前のリビジョンのファイルを正しく復元 できる。
変更の記録を完全に維持できる。
リビジョン番号に影響しない。
欠点:
改名の前後で履歴を辿ることが困難である。
ディレクトリの改名と移動の普通の方法は 通常の改名方法 で説明されている ようにその中のそれぞれのファイルを改名もしくは移動することです。それか ら ディレクトリを削除する に説明されているように `-P' オプショ ンを付けて取り出します。
本当にリポジトリの中身を変更してディレクトリを改名したり削除したければ、 次のようにしてください:
ディレクトリを改名する前に、 ディレクトリの作業コピーを取り出している全ての人に、 その旨を知らせます。 次のステップに進む前に、彼等全員が変更内容を格納し、 作業コピーを削除しなければなりません。
リポジトリ中のディレクトリを改名します。
$ cd $CVSROOT/parent-dir $ mv old-dir new-dir |
CVS の管理用ファイルを修正します。 (例えばモジュール名を改名する場合等)。
再び取り出して作業を続けられることを、 全員に知らせます。
誰かが作業コピーを消さずに持っていた場合、 彼がリポジトリから消されたディレクトリを削除するまで、 彼の発行する CVS コマンドは無視されます。
ディレクトリを移動させるよりは、 ディレクトリ中のファイルを移動させる方を推奨します。 ディレクトリを移動させれば、 ディレクトリ名に依存している古いリリースを正確に復元する事は、 ほとんど不可能になります。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.