[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

7. ファイルとディレクトリの追加、削除、改名

プロジェクトの最中では、よく新しいファイルを追加します。削除や改名、も しくはディレクトリも同様です。心に留めておく総合的な概念は、元に戻せな い変更をする代わりに、存在するファイルの修正のように、CVS に変更 が発生したという事実を記録させたい、ということです。CVS でこれを する厳密な機構は状況に依り異ります。


7.1 ディレクトリにファイルを加える

ディレクトリにファイルを加える手順を説明します。

add コマンドは、 新しいディレクトリを加える場合にも使用します。

他のほとんどのコマンドと異なり、 add コマンドは再帰的に動作しません。 `cvs add foo/bar' とタイプすることさえできません。 代りに、 次のようにする必要があります。

 
$ cd foo
$ cvs add bar
コマンド: cvs add [-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 ファイルの追加や削除もマージできる)。


7.2 ファイルを削除する

ディレクトリは変わります。 新しいファイルが加えられ、古いファイルが削除されます。 しかし、モジュールの古いバージョンの、 正確なコピーを復元できるようにしておきたいと思うでしょう。

ここでは、モジュールからファイルを削除した後も、 古いバージョンの復元を可能にする手順を説明します:

ファイルの削除を格納する場合、CVS は、 ファイルがもう無いという事実を記録します。 ファイルが他の枝に存在していても良いし、 後で別のファイルを同じ名前で加えても構いません。 checkoutupdate に指定する オプション `-r' や `-D' に応じて、 CVS が正しくファイルを作成したり、しなかったりします。

コマンド: cvs remove [options] files …

ファイルが削除された事実をリポジトリに伝えます (作業ディレクトリから未削除のファイルは処理されません)。 このコマンドを実行しても、リポジトリのファイルは、 削除が格納されるまで実際には削除されません。 オプションの完全な一覧は 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 ファイルの追加や削除もマージできる)。


7.3 ディレクトリを削除する

概念上では、ディレクトリの削除はファイルの削除と似ています--現在の作 業ディレクトリからそのディレクトリを消したいけれど、ディレクトリが存在 した古いリリースも取得できるようにしたい、と思うでしょう。

ディレクトリを削除する方法は、その中の全てのファイルを削除することです。 ディレクトリ自身は削除しません。そうする方法はありません。代わりに、 cvs update, cvs checkout, cvs export に `-P' オプションを指定して、作業ディレクトリから空のディレクトリを削除するよ うにします。おそらく最良の方法は常に `-P' を指定することです。空 のディレクトリが欲しければ、削除されないように、ダミーファイルを作って ください (例えば、 `.keepme')。

checkoutexport の `-r' と `-D' のオプショ ンでは `-P' が暗黙に含まれていることに注意してください。この方法 により CVS は正しくディレクトリを作ることができ、又、取り出した特 定のバージョンのそのディレクトリにファイルがあるかどうかに左右されなく なります。


7.4 ファイルの改名と移動

ファイルを他のディレクトリに移動したり、改名したりするのは、 難しくはありません。 しかし、難解な方法でこれを実現するものがあります。 (ディレクトリの移動と改名は、 より困難です。See section ディレクトリの改名と移動.)。

以降の例では、 old というファイルを new に改名します。


7.4.1 通常の改名方法

ファイルを移動する通常の方法は、 oldnew にコピーして、 普通の 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' を用いると良いでしょう。詳しい情報は リビジョンの割当て を参照 してください。


7.4.2 履歴ファイルを移動する

この方法は、リポジトリ中のファイルの移動を含むため、 さらに危険です。 この節を全部読んでから実行して下さい。

 
$ cd $CVSROOT/dir
$ mv old,v new,v

利点:

欠点:


7.4.3 履歴ファイルをコピーする

この方法も、リポジトリ中のファイルの移動を含みます。 欠点が無い訳ではありませんが、安全です。

 
# リポジトリ中の 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

タグを削除することで、 以前のリビジョンを復元することができます。

利点:

欠点:


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

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

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

  1. ディレクトリを改名する前に、 ディレクトリの作業コピーを取り出している全ての人に、 その旨を知らせます。 次のステップに進む前に、彼等全員が変更内容を格納し、 作業コピーを削除しなければなりません。

  2. リポジトリ中のディレクトリを改名します。

     
    $ cd $CVSROOT/parent-dir
    $ mv old-dir new-dir
    
  3. CVS の管理用ファイルを修正します。 (例えばモジュール名を改名する場合等)。

  4. 再び取り出して作業を続けられることを、 全員に知らせます。

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

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


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.