製品情報
技術情報
  簡単に使ってみましょう(Windows)
  簡単に使ってみましょう(UNIX)
  よくある質問 (FAQ)
  テクニカルノート
  製品比較
  用語集
  ネットワーク上でのソフトウェア開発
  インターファイル・ブランチング
  ソフトウェア構成管理の
高度な実践方法・・・
  変更管理を通じた製品品質の向上
  PERFORCE−SOFTUNE
連携運用ガイド (Rev1.02)[PDF]
ライセンス情報
テクニカルサポート
ソフトウェア ダウンロード
マニュアル ダウンロード









 
テクニカルノート003 HOME製品PERFORCE 技術情報ノート


大文字/小文字の問題とマルチ・プラットフォームの開発


このノートでは、PERFORCEがどのように大文字/小文字をハンドリングするかということと、これに関してユーザが混乱し易い部分について説明します。そして、大文字/小文字の問題をどのようにして回避し、発生したときにそれを解決する方法について説明します。


背景

p4 addを用いてPERFORCEのディポにファイルが追加されると、サーバルート配下にアーカイブ・ファイル(例えば、$P4ROOT/depot/main/file1,v)が書き込まれます。併せて、関連するメタデータのエントリがPERFORCEのデータベース・ファイル(例えば、$P4ROOT/db.rev)に書き込まれます。新しいアーカイブ・ファイル(およびメタデータ・エントリ)は、p4 integrate を用いた場合にも書き込まれます。大文字/小文字を区別するプラットフォーム上でPERFORCEを使用しているとき、このメタデータとアーカイブ・ファイルとの間で、大文字/小文字が異なってしまう可能性があります。


大文字/小文字を区別する必要がある動作

UNIX上のPERFORCEサーバは、名前における大文字/小文字の違いをサポートします。Windows上のPERFORCE サーバは、大文字/小文字の違いを無視します。ジョブにおけるキーワードの検索では、常に大文字/小文字は無視されます。これをまとめると、下表のようになります。

大文字/小文字の区別 UNIXサーバ Windowsサーバ
パス名およびファイル名 区別する 区別しない
データベース・エントリ
(クライアント名、ラベル名、等)
区別する 区別しない
ジョブ検索のキーワード 区別しない 区別しない



現在のPERFORCEサーバがどのプラットフォーム上で実行しているかを調べるには、 p4 infoを実行します。

以下のセクションでは、PERFORCEサーバとPERFORCEクライアントの様々な組み合わせにおいて、大文字/小文字をハンドリングする動作について説明しています。

UNIXサーバ + UNIXクライアント
問題なし --- メタデータとアーカイブ・ファイルの大文字/小文字は常に一致します。
Windowsサーバ + Windowsクライアント
問題なし --- メタデータとアーカイブ・ファイルとの間に大文字/小文字の違いが発生する可能性があります。しかし、これらの違いは無視されます。
UNIXサーバ + Windowsクライアント
潜在的な問題 −− UNIX(およびUNIXファイルシステム)上のPERFORCEサーバは、大文字/小文字が混在したファイルを保持する可能性があります。一方、Windowsファイルシステムは大文字/小文字が混在したファイルを保持することができません。
Windowsサーバ + UNIXクライアント
潜在的な問題 --- Windows上のPERFORCEサーバは、大文字/小文字が混在したメタデータを管理することができます。結果として、WindowsベースのPERFORCEサーバにおいて1つのディレクトリに存在するファイルが、UNIXベースのPERFORCEクライアント・ワークスペース内では2つ以上の大文字/小文字が異なった別ディレクトリに存在しているのかもしれません。
UNIXサーバ + Windowsクライアント(詳細)

PERFORCEサーバがUNIX上にあり、かつUNIXからアクセスするユーザとWindowsからアクセスするユーザの両方が存在する場合、UNIXユーザは、ファイル名の大文字/小文字のみが異なるファイルをサブミットしないよう注意が必要です。UNIXサーバ自体はこういったファイルをサポートしますが、Windowsユーザがこのようなファイルをクライアント・ワークスペース同期すると、大文字/小文字だけが異なるディレクトリやファイルは、お互いに上書きし合うことになります。

例えば、UNIXベースのPERFORCEサーバ上において、あるファイルが大文字/小文字の異なる2つのディレクトリ配下に存在し、それらを "main/file1" および "MAIN/file1" とします。次のコマンドを UNIXベースのPERFORCEクライアントから実行したときは、期待どおり、2つの大文字/小文字が異なるディレクトリ配下に2つの異なるファイルとして同期されます。:
p4 sync main/file1
p4 sync MAIN/file1
しかしながら、同じコマンドをWindows上のPERFORCEクライアントから実行すると、2つの異なるファイルはクライアント・ワークスペース内の同一ディレクトリに同期され、最後の同期操作がそれ以前に同期したファイルを上書きしてしまいます。

ファイルの保存方式に加え、大文字/小文字はPERFORCEクライアントのエンティティにも影響を与えます。 UNIX上のPERFORCEサーバは、ユーザ名、クライアント名、ブランチ仕様名、ラベル名に対して 大文字/小文字を意識します。UNIXサーバに接続しているWindowsユーザは、新しいクライアント・ワークスペースに対するデフォルトの名前として、小文字のホスト名が使われることに気を付ける必要があります。例えば、ホスト名 "ROCKET" のマシン上で新しいユーザがクライアント仕様を作ると、そのクライアント・ワークスペース名はデフォルトで "rocket" となります。もし、そのユーザが後でP4CLIENTを "ROCKET" または "Rocket" に設定してしまうと、PERFORCEは「そのクライアント・ワークスペースは未定義」と認識します。このクライアント・ワークスペースを使用するには、P4CLIENTを "rocket" に設定する(もしくはP4CLIENTを設定しない)必要があります。

Windowsサーバ + UNIXクライアント(詳細)

PERFORCEサーバがWindows上で動作している場合、UNIXクライアントからアクセスしているユーザは、大文字/小文字の異なるファイルが同一の名前空間に保存されることを意識しなければなりません。例えば、次のコマンドをUNIXのクライアント・ワークスペースから実行すると、両方のファイルはWindowsサーバ上で同じディポ・ディレクトリに格納されます。:
p4 add dev/file1
p4 add DEV/file2
サーバ上のディポ・ファイルにおいて、Windowsサーバがディポ・パスとファイル名を割り当てる際、最初に見つかった名前が採用されます。上記の例では、ファイルシステム上に保存されるディポ・パス名は "dev" となります。しかしながら、PERFORCEのメタデータにおけるパスおよびファイル名の大文字/小文字は、ユーザから入力されたままの状態で維持されます。PERFORCEサーバは、これに基づいてファイルの場所を追跡しますので、大文字/小文字の違いを認識するUNIX上のクライアント・ワークスペース内では、これらのファイルは異なるファイルとしてアクセスされます。

Windowsユーザは、新しいファイルを追加する際に、ファイル名やパス名の大文字/小文字に関して一貫性を保つように注意しなければなりません。Windowsクライアントから//depot/main/foo.cおよび //depot/MAIN/bar.cとして追加されたファイルは、UNIXユーザのクライアント・ワークスペースにおいては、2つの異なるディレクトリ配下のファイルとして同期されてしまいます。Windowsサーバにおけるファイルは、ディポ・ファイルでは大文字のみ(または小文字のみ)のファイルとして格納されたとしても、メタデータでは追加されたときの大文字/小文字が保持されます。また、ディレクトリ・パスにおける実際の大文字/小文字は、コマンドラインでどのように入力されたか、またはドラッグ&ドロップ操作においてOSがどのように取り扱ったかによって、変化する可能性があります。

パス名の大文字/小文字に確実に一貫性を持たせる方法として、サブミット前のトリガがあります。このトリガのサンプルは、Perforce Software社のパブリック・ディポにおいて参照することができます。: http://public.perforce.com/public/perforce/utils/index.html#triggers



大文字/小文字の問題を検出し解決する

大文字/小文字の問題を検出する方法として、p4 verifyを定期的に実行する方法があります。例えば、次のように実行します。:
p4 verify -q //...
p4 verifyは、関連するディポ・ファイルに対して、各リビジョンのメタデータ・エントリをチェックします。UNIXサーバにおいて、ディポ・ファイルの大文字/小文字がメタデータ・エントリと異なることを検出すると、ディポにない!MISSING!)と出力されます。使用方法の詳細につきましては、PERFORCE コマンド・リファレンスをご参照ください。

もし、ファイル名の大文字/小文字に関して問題をお持ちの方は、どうぞご遠慮なく 弊社技術サポートにお問い合わせください。


経緯

PERFORCEの以前のリリース(97.2より前)においては、すべてのファイル名、パス名およびデータベース・エントリに対して、サーバがUNIX上で動作していようがWindows上で動作していようが、大文字/小文字の区別を行っていました。例えば、//depot/main/foo.cおよび//depot/MAIN/bar.cは、まったく異なる 2つのファイルとして取り扱っていました。ところが、Windows上のPERFORCEサーバに接続しているUNIX上のユーザがいるサイトでは、この仕様によって問題が発生します。つまり、サーバ上のファイルシステムでは大文字/小文字の意識がないため、UNIXユーザによってサブミットされたファイルの大文字/小文字を区別できないということです。(もし、Windows上で97.2より前のサーバを動作させている方は、サーバ・プログラムとデータベースのアップグレードをお勧め致します。弊社技術サポートへご連絡ください。)

リリース97.3において、UNIXサーバのみが名前の大文字/小文字を区別するようになりました。しかしながら、 UNIX/Windowsの混在環境で開発を行う場合、まだ大文字/小文字に関するいくつかの問題があります。

リリース2000.1において、Windows上のPERFORCEサーバでは、すべてのディポ・ファイルが小文字で格納されるようになりました。この変更は、もしこの環境をUNIX上へ移行することを考えたとき、その移行をし易くします。つまり、WindowsからUNIXへの移行においては、大文字/小文字に関して何も意識する必要はありません。代わりに、異なるプラットフォーム間でPERFORCEサーバを移動したときには、p4 verifyの実行が必須となり、これによって大文字/小文字に関する問題を検出することができます。PERFORCEサーバの移動に関しては、テクニカルノート NOTE010をご参照ください。



戻る