Node: CVS keeps changing file permissions; why does it do that?, Next: , Previous: My commits seem to happen in pieces instead of atomically, Up: Some Real Life Problems (With Solutions)



CVS keeps changing file permissions; why does it do that?

CVS がファイルのパーミッションを変更しつづけるんです; なんでそんなこ とをするんでしょうか?

一般に、 CVS はファイルのパーミッションを保存するについてはあまり良 い仕事をしません。プロジェクトをインポートしたあと、それをチェックア ウトする場合、新しい作業コピーのファイルのパーミッションが、インポー トされたときと同じである保証はありません。作業コピー中のファイルが、 普通にファイルを新しく作ったときの標準パーミッションと同じ、というこ とのほうがありそうです。

しかし、例外が少なくともひとつあります。プロジェクト内に実行可能なシェ ルスクリプトを保存したい場合には、対応するリポジトリのファイルを実行 可能にしておけば、全ての作業コピーでそのファイルを実行可能に保つこと ができます:

     floss$ ls -l /usr/local/newrepos/someproj
     total 6
     -r--r--r--   1 jrandom  users         630 Aug 17 01:10 README.txt,v
     -r-xr-xr-x   1 jrandom  users        1041 Aug 17 01:10 scrub.pl,v*
     -r--r--r--   1 jrandom  users         750 Aug 17 01:10 hello.c,v
     

そのファイルは実行可能ですが、リポジトリ中のファイルがすべてそうであ るように、読み出し専用になっているままです(CVS は RCS ファイルの一時 的なコピーを作って作業し、そのコピーの中ですべてをおこなってから、準 備ができたらそのコピーをオリジナルと置き換える、ということを思い出し てください)。

実行可能ファイルをインポートまたは追加した場合には、CVS は実行可能ビッ トを保存しますので、ファイルが最初から正しいパーミッションならばなに も心配することはありません。ですがたまたま、実行可能にする前にファイ ルを追加してしまったら、リポジトリ内に移って、RCS ファイルのパーミッ ションを手で実行可能にしてください。

リポジトリのパーミッションのほうがつねに優先されます。リポジトリ内の そのファイルが実行可能ではなくて、作業コピー中では実行可能だった場合、 アップデート後には作業コピーのそのファイルは実行可能ではなくなってし まいます。自分のファイルのパーミッションが黙って変更されてしまうとい うのは非常にいらだたしいことです。これが起こったら、まずリポジトリを チェックし、対応する RCS ファイルを適切なパーミッションに設定して解 決するかどうか見てみてください。

最近、CVS に PreservePermissions という機能が追加されました。 この機能はこのような問題を少しは軽減するかもしれません。しかし、この 機能を使うと、考えもしなかった他の結果をうむことになるかもしれません (無条件にこの機能を推薦しなかったのはこれが理由です)。CVSROOT/config に PreservePermissions=yes を書く前に、Cederqvist マニュアル の configSpecial Files のノードをよく読んでくださ いね。