ノード: What Happens When You Remove A File, 次: , 前: RCS Format, 上: Repository Administration



What Happens When You Remove A File

あるプロジェクトからファイルを削除する場合、そのファイルは単になくなる だけではありません。 プロジェクトの古いスナップショットを要求されても、 CVS はそのようなファイルにもちゃんとアクセスできなければならないのです。 なくなるかわりに、そのファイルは文字通り Attic(訳注: Attic=屋根 裏)に移されます:

     floss$ pwd
     /home/jrandom/src/myproj
     floss$ ls /usr/local/newrepos/myproj/
     README.txt,v  a-subdir/     b-subdir/     foo.jpg,v   hello.c,v
     floss$ rm foo.jpg
     floss$ cvs rm foo.jpg
     cvs remove: scheduling 'foo.jpg' for removal
     cvs remove: use 'cvs commit' to remove this file permanently
     floss$ cvs ci -m "Removed foo.jpg" foo.jpg
     Removing foo.jpg;
     /usr/local/newrepos/myproj/foo.jpg,v  <--  foo.jpg
     new revision: delete; previous revision: 1.1
     done
     floss$ cd /usr/local/newrepos/myproj/
     floss$ ls
     Attic/      README.txt,v  a-subdir/     b-subdir/   hello.c,v
     floss$ cd Attic
     floss$ ls
     foo.jpg,v
     floss$
     

プロジェクトのリポジトリ内ディレクトリに Attic/ というサブディレ クトリがある場合、それは、少なくとも1ファイルはそのディレクトリから削除 された、ということを意味します(つまりプロジェクトで Attic という名前の ディレクトリは使ってはいけないということです)。CVS は RCS ファイルを Attic/ に移すだけではなく、そのファイルの新しいリビジョンを、 dead という特別なリビジョン状態でコミットします。Attic/foo.jpg,v から関係個所を示します:

     1.2
     date   99.06.21.03.38.07;   author jrandom;   state dead;
     branches;
     next	1.1;
     

あとでファイルを生き返らせた場合CVS は、過去のある時点でこのファイルが 死に、今は再び生きている、ということを記録します。

これはつまり、削除したファイルを元に戻したい場合に Attic/ ディレクトリ から出してプロジェクトに戻しただけではダメだということを意味します。そ うではなくて、作業コピー内で次のようにしてください:

     floss$ pwd
     /home/jrandom/src/myproj
     floss$ cvs -Q update -p -r 1.1 foo.jpg > foo.jpg
     floss$ ls
     CVS/       README.txt   a-subdir/   b-subdir/   foo.jpg     hello.c
     floss$ cvs add -kb foo.jpg
     cvs add: re-adding file foo.jpg (in place of dead revision 1.2)
     cvs add: use 'cvs commit' to add this file permanently
     floss$ cvs ci -m "revived jpg image" foo.jpg
     Checking in foo.jpg;
     /usr/local/newrepos/myproj/foo.jpg,v  <-- foo.jpg
     new revision: 1.3; previous revision: 1.2
     done
     floss$ cd /usr/local/newrepos/myproj/
     floss$ ls
     Attic/	      a-subdir/     foo.jpg,v
     README.txt,v  b-subdir/     hello.c,v
     floss$ ls Attic/
     floss$
     

RCS 形式について知るべきことはもっとたくさんありますが、CVS のリポジト リの管理者としてはこれで十分だと思います。RCS ファイルを直接いじること は滅多にないことです。普通はせいぜいリポジトリ内のファイルのパーミッショ ンをいじったりする程度です、少なくともわたしが経験してきたところでは。 そうは言っても、CVS の動作が変になりはじめたら(稀ではありますが可能な範 疇を越えているわけではありませんから)、実際に RCS の中身を見てみて、何 が起こっているのか調べたくなるだろうと思います。