FAQ

[Copy]コンテンツ

PERFORCE

ID.002

Q. PERFORCEEサーバに接続していない環境での開発手順

A.


PERFORCEサーバに接続していない環境であっても、クライアント・ワークスペース上のファイルに対して開発作業を行うことができます。ただし、 PERFORCEサーバの機能を実行することはできません。また、オフラインの間に行った変更作業によって、クライアント・ワークスペース上のファイルは PERFORCEサーバのメタデータと矛盾した状態になります。PERFORCEサーバに再接続したら、オフラインで行った変更を取り入れるため、整合性 のチェックを行わなければなりません。

クライアント・ワークスペースにどのファイルがあるかをPERFORCEサーバが認識し、さらにどのファイルが追加/削除/編集目的で作業状態になってい るかを認識しているとき、そのクライアント・ワークスペースは正しく同期されている状態となります。もし、PERFORCEの管理外においてワークスペー スのファイルを作成したり、削除したり、編集したりすると、そのクライアント・ワークスペースは正しく同期されていない状態となります。
こういった状態は、開発の作業をオフライン(例えば電車の中でノートPCを使う)で行った場合や、ファイル管理として PERFORCEが直接動作しない開発環境を用いている場合に、よく発生します。

以下では、PERFORCEの管理外でクライアント・ワークスペース内の情報が変更され、後でそれをチェンジリストとして構築する手順について述べていま す。このチェンジリストは、すなわち当該クライアント・ワークスペースとディポ内のファイルとの差異であり、後にサブミットすることができます。

チェンジリストに盛り込まれる可能性があるワークスペースの変更には、4つのタイプがあます。
  • 新しいファイルが追加された
  • ファイルが削除された
  • ファイルが編集された
  • ファイルがリネームされた(オプション)


  • ここでは、使用しているクライアント・ワークスペースの名前を "myclient"、そのクライアント・ルートを "/testclient" (UNIX)または "c:\testclient"(Windows)とします。


    1.まず、新しいファイルを探し、それらを「追加」目的の作業状態にします:

    UNIX:
    cd /testclient
    find . -type f -print | p4 -x - add

    この操作では、シンボリックリンクは追加されませんので注意が必要です。詳細は、 テクニカルノート NOTE012をご参照ください。

    Windows:
    cd c:\testclient
    dir /s /b /a-d | p4 -x - add

    この操作によって、クライアント・ワークスペースにおける該当パスの全ファイルが、新しいディポ・ファイルとして追加登録されます。既に存在するファイル については "既存のファイルを add できません" というエラー・メッセージが表示されますが、このエラーは無視して構いません。
    これにより、クライアント・ワークスペース内に作成されたすべての新しいファイルは、追加目的の作業状態となります。


    2.次に、もはや存在していないファイルを「削除」目的の作業状態にします:
    p4 diff -sd //myclient/... | p4 -x - delete

    p4 diff -sdを実行すると、対応するクライアント・ワークスペースのファイルが存在しないディポ・ファイルがリストされます。 この操作によって、クライアント・ワークスペースから削除されたすべてのファイルは、削除目的の作業状態となります。


    3.さらに、変更されたファイルを「編集」目的の作業状態にします:
    p4 diff -se //myclient/... | p4 -x - edit

    p4 diff -seを実行すると、対応するクライアント・ワークスペースのファイルとの間に何らかの差分があるディポ・ファイルがリストされます。


    4.最後にリネームしたファイルがあるかどうかを調べ、もしあればそれらを追加するのか、それとも p4 integrateでブランチするのかを決めます:

    オフラインでファイルをリネームすることはお勧めしません。なぜならば、そのファイルがリネームされたのか、それとも単に削除されただけなのか、PERFORCEはそれを直接的に認識する方法がないからです。
    PERFORCEのリネーム操作は、削除を伴った反映と いう2つのステップから構成されます。もしオフラインでファイルをリネームすると、上記1.においてリネームされたファイルは新規追加されたファイルとし て認識され、上記2.においてリネームされた古い名前のファイルは削除されたファイルと認識されて削除目的の作業状態になります。
    オフラインでリネームされたファイルに対して、上記2.で削除目的の作業状態になるのは正しいのですが、上記1.で追加目的の作業状態になるのはPERFORCEの機能的に正しくありません。リネームされたファイルは追加目的になる(上記1.より)のではなく、古い名前から新しい名前へブランチされるべきです。つまり、新しいファイルを単に追加するのではなく、反映操作によって追加します。そうすることによって、反映操作によって古いファイル名と新しいファイル名との間にリンクが作成され、リネームを通じた変更履歴を保存することができるからです。

    もし、新しくリネームされたファイルがチェンジリスト内に現れ、上記1.の結果として追加目的の作業状態になっていたら、それを追加目的から反映目的に変更することができます。しかし、そうするためには、最初にp4 revertの 操作を実行しなければなりません。もし、新しくリネームしたファイルの内容に何らかの変更を加えていたならば、その変更は(revertの結果として)失 われます。例えば、ファイル "abc.c" を "xyz.c" にリネームしたとします。上記1.~3.の操作を実行した後、予定外の追加操作を以下のようにやり直すことになる場合があります。:

    p4 revert xyz.c
    p4 integrate add.c xyz.c

    繰り返しますが、 "abc.c" から "xyz.c" へリネームした後にファイルの内容を変更した場合は、いったん元に戻す(revert)必要があるため、その内容は失われることになります。これを回避す るためには、元に戻す前のファイルをいったんバックアップしておき、反映目的で作業状態にした反映先ファイルをそのバックアップで上書きします。しかし、 この操作はおそらく面倒な操作でしょうし、PERFORCE の管理外で実行しなければなりません。そういう意味から、オフラインでファイルをリネームすることをお勧めしません。どうしてもオフラインでファイルをリ ネームする必要があるときには、むしろブランチするのではなく、単にリネームされたファイルを追加する方が簡単かつ安全なのかもしれません。

    以上の操作(1.~4.)を実行すると、作成、削除、変更またはリネームされたファイルを含むチェンジリストが作成されます。 チェンジリスト内のファイルが正しいことを確認したら、それをサブミットすることができます。

    P4Winを使用している場合、[ファイル]→[拡張]メニューにある[整合性のチェック]を選択することで、最後の2つのdiff手順を実行することができます。

    << PERFORCEに関するFAQ一覧へ戻る