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

15. 特別なファイル

普通の環境では、CVS は普通のファイルでのみ動作します。プロジェクトの全 てのファイルは永続すると仮定されています。開き、読み込み、閉じるという 操作などが可能でなければなりません。また、CVS はファイルの使用許可と所 有権を無視します。そのような問題はインストール時に開発者によって解決さ れる必要があります。言い換えれば、デバイスを "格納" することは不可能で す。デバイスファイルを開けなければ、CVS はそれを扱うことを拒否します。 ファイルはリポジトリの取り扱い中にも所有権や使用許可を失います。

リポジトリで設定変数 PreservePermissions (see section The CVSROOT/config configuration file) が設 定されていると、CVS は以下のファイルの特性をリポジトリに記録します:

PreservePermissions オプションを使うと CVS の振舞いにいくつか影 響します。まず、CVS で使用可能になった新しい操作の中に、全ての使用者に は使用可能でないものができます。特に、ファイルの所有権と特別なファイル の特性とはスーパーユーザにだけ変更できるものでしょう。ですから、 PreservePermissions 設定変数が設定されていると、使用者は CVS の 操作をうるために `root' になる必要があるでしょう。

PreservePermissions が使用されていると、CVS の操作の中には (`cvs status' のように) ファイルのハードリンク構造を認識せず、合っ ていないハードリンクに関して見せかけの警告を出力します。これは CVS の 内部構造がハードリンクに必要なデータ全てを集めるのを難しくしており、そ のために不正確なデータでファイルの衝突を調べるからです。

CVS はファイルの内容が変更されたときのみ、それが変更されたと考えること による、より微妙な違いがあります (特に、作業ファイルの修正時刻がリポジ トリのそのファイルと合わないとき)。ですから、使用許可、所有権、ハード リンクが変わったり、デバイスの主、副番号が変わったとしても、CVS は報告 しません。そのような変更をリポジトリに格納するためには、`cvs commit -f' で格納を強制する必要があります。これは、ファイルの使用許可 が変わっていて、リポジトリのファイルが作業コピーより新しいと、 `cvs update' の実行は、知らない間に作業コピーの使用許可を変更して いるということでもあります。

CVS リポジトリでのハードリンクの変更は特に慎重な扱いが必要です。 `foo' がファイル `old' にリンクされていたけれど、後でファイ ル `new' にリンクされ直したとしましょう。`foo', `old', `new' は全て中のリンクパターンは変更されているけれど、`foo' と `new' だけが修正されていて、そのために `old' は格納の候補 としてみなされない、という変な状況になることがあります。このような方法 により整合しない結果は非常に簡単に作られます。ですから、ハードリンクを リポジトリに保存するのが重要なときは、賢明な動作方法は最後の格納からリ ンクや状態が変わったファイル全てに touch することです。実際、複 雑なハードリンク構造のディレクトリを格納する前には touch * をす るのが賢いかもしれません。

おそらく明らかである理由により、普通のファイルだけがマージできるという ことを書いておくのも意味のあることでしょう。もし `cvs update' や `cvs checkout -j' がシンボリックリンクを普通のファイルとマージし ようとしたり、2つのデバイスファイルが違った種類のデバイスのためのもの であったりすると、CVS は衝突を報告して、マージの実行を拒否します。また、 テキストがないファイル上でのテキスト比較は無意味なので、`cvs diff' はこれらのファイル間の相違を報告しません。

PreservePermissions 機能はクライアント/サーバの CVS では動 作しません。別の制限に、ハードリンクは同じディレクトリの他のファイルへ のリンクでなければならない、というものがあります。ディレクトリをまたい だハードリンクは使用できません。


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

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