p4 sync

ディポの内容を反映するようにクライアントワークスペースを更新します。

構文規則

            p4 [g-opts] sync [-f -k -L -n -N -q -r] [-m max] [[FileSpec][revSpec]]
        
            p4 [g-opts] sync [-L -n -N -q -s] [-m max] [[FileSpec][revSpec]]
        
            p4 [g-opts] sync [-L -n -N -p -q] [-m max] --parallel=threads=n[,batch=n][,batchsize=n][,min=n][,minsize=n [[FileSpec][revSpec]]  

説明

p4 syncは、ファイルパターン引数に適合するファイルを、 ディポからクライアントワークスペースにコピーすることにより、 クライアントワークスペースをディポと同期させます。

コマンドラインにファイルパターンを指定しない場合、 p4 syncは次の基準をすべてを満たしている 特定のディポファイルのみをコピーします。

  • クライアントビューで表示されるファイル
  • p4 editp4 deletep4 add、またはp4 integrateにより作業状態になっていないファイル
  • クライアントワークスペース内に最後のリビジョン(最新リビジョン)として まだ存在していないファイル

新しい空のワークスペースでは、すべてのディポファイルが後の2つの基準に適合するため、 ワークスペースビューを通して見ることのできるすべてのファイルが、 ユーザのワークスペースにコピーされます。

コマンドラインでファイルパターンを指定すると、 そのファイルパターンに適合し、かつ上記の基準に適合するファイルのみがコピーされます。

ファイルパターンにリビジョン指定子が含まれている場合、 指定したリビジョンがクライアントワークスペースにコピーされます。

ファイル引数にリビジョン範囲が含まれている場合、 そのリビジョン範囲に含まれるファイルのみが更新され、範囲中で最も大きい番号のリビジョンが使用されます。 ファイル引数にリビジョン範囲が含まれている場合、 ワークスペースビュー内に既に存在しないファイルには影響しません。 ファイル指定の「リビジョン範囲の使用」、p4 archiveの「使用上の注意点」、および「p4 help revisions」を参照してください。

p4 syncコマンドはディポから最新バージョンを取得し、ローカルワークスペースファイルを更新します。 ただし、ローカルワークスペースを使用しているユーザの作業が誤って失われないようにするため、p4 syncを実行するときは、ローカルワークスペースで作業状態になっているすべてのファイルの衝突解決をp4 resolveコマンドを使用して手動で衝突解決してからサブミットする必要があります。

  • 新しく同期したファイルは読み取り専用です
  • p4 editp4 deleteはファイルを書き込み可能にします
重要

ファイルを書き込み可能にするには、Helix Coreサーバコマンドを使用します。オペレーティングシステムコマンドは使用しないようにしてください。

注意

分散バージョニング環境(DVCS)内でHelix Coreサーバを使用している場合は、ファイルパスを指定する際に、実際のチェンジリスト番号の代わりに、サブミットされた変更仕様のグローバルチェンジリストIDを使用することができます。以下に例を示します。

p4 sync //depot/...@30E7C829-08C504-4109-89AA-904D0C2194B8

グローバルチェンジリストIDの詳細については、「分散バージョニング環境におけるHelix Coreサーバの利用」で「サーバ間でチェンジリストのIDを追跡する」を参照してください。

オプション

-f

同期を強制実行します。 すでにクライアントワークスペースに特定のリビジョンのファイルがあったとしても、 Helixサーバは同期を実行します。 ファイルが書き込み可能であっても、 そのファイルは上書きされます。

このオプションは作業状態のファイルに影響しませんが、 noclobberクライアントオプションをオーバーライドします(p4 clientを参照してください)。

-k

既存のワークスペースファイルを保存します。 クライアントワークスペースを更新せずにhaveリストを更新します。 haveリストを更新してクライアントワークスペースの実状に一致させる必要がある場合にのみ p4 sync -kを使用してください。

p4 sync -kp4 flushのエイリアスです。 関連する使用例については、p4 flushコマンドの説明を参照してください。

管理者が構成可能変数zerosyncPrefixを設定していると、 名前の始めに指定されたプレフィックスがつくすべてのワークスペースで、 p4 sync -kが想定されます。

-L

スクリプト作成時に使用され、 完全なディポシンタックスで有効なリビジョン番号とともに指定された有効なファイル引数リストに対して同期を実行します。

このフラグが使用される場合、 ラベルに類似した内部テーブルを構築することで、引数が同時に処理されます。 このファイルリスト処理は、内部クエリエンジンを個々のファイル引数に呼び出すより 非常に高速になります。 ただし、ファイル引数の構文は厳密であるため、 エラーが発生した場合はコマンドは実行されません。

-m max

指定されたmax個までのファイルのみを同期します。

-n

プレビューモード:実際に同期を実行せずに、 同期の結果を表示します。

-N

プレビューモード:同期に関係する想定ネットワークトラフィックの概要を、 同期を実行せずに表示します。

これにより、追加または更新されるファイルの数を確認することができます。これは、サイズの大きなファイルが多数存在する場合や、 帯域幅やディスク容量に制限がある場合などに便利な方法です。

このオプションは、同期を実行する前に同期操作のネットワークへの影響を 予測するのに便利です。クライアントワークスペースビューを最近更新した場合、 新しく構成されたワークスペースに同期するに、 何ギガバイトもの資産を含むフォルダツリーを誤って含めていないかを 確かめるとき効果的です。

-p

クライアントワークスペースにデータを書き込みますが、haveリストを更新しません。 既に同期または作業状態にされたファイルは警告メッセージを出力し、 処理しません。

このオプションは通常、 初回の同期後にワークスペースの状態を追跡する必要のない(ビルド環境や公開用環境などの)プロセスで 使用されるワークスペースに使用されます。

注意

マスターが使用できない状態で、syncコマンドを使用してレプリカのディポを自分のレプリカワークスペースに同期すると、コマンドが失敗します。これは、レプリカを使用して、マスター上のdb.haveテーブルを更新する必要があるためです。ただし、その場合はp4 sync -pコマンドを使用することができます。

--parallel

並列ファイル転送のオプションを指定します。 --parallelオプションを有効にするには、 構成可能変数net.parallel.maxを1より大きい値に設定する必要があります。

  • threads=nは、 n個の独立したネットワーク接続使用して、ファイルを同時に送信します。 指定したスレッドは作業をバッチで取得します。

    デフォルト値はないため、値を設定する必要があります。

  • batch=n1つのバッチ内のファイル数を指定します。

    デフォルト値は8です。

  • batchsize=n1つのバッチ内のバイト数を指定します。

    デフォルト値は512Kです。

  • min=n並列同期の最小ファイル数を指定します。 同期サイズが小さすぎる場合、 並列ファイル転送は開始されません。

    デフォルト値は9です。

  • minsize=n並列同期の最小バイト数を指定します。 同期するバイト数が小さすぎる場合、 並列ファイル転送は開始されません。

    デフォルト値は576Kです。

並列処理」を参照してください。

-q

サイレントモード: 通常の出力メッセージを抑止します。 エラーまたは例外的状態に関するメッセージは表示されます。

-r

新しい場所でディポ内の新しい位置にマッピングされたファイルを 再び作業状態にします。デフォルトでは、作業状態のワークスペースファイルは、 元から作業状態だったディポファイルと関連付けられたままになります。

例えば、p4 client -f -sの後に p4 sync -rを指定して実行することにより、 作業中の作業を別のストリームに移動できます。

-s

Safe sync:クライアントワークスペースの内容を、 最後に同期された内容と比較します。Helixサーバの管理外で ファイルが変更されていた場合、 エラーメッセージが表示され、ファイルは上書きされません。

クライアントワークスペース仕様に allwriteおよびnoclobberオプションの両方が設定されている場合、 このチェックはデフォルトで実行されます。

g-opts

詳しくは、「グローバルオプション」を参照してください。

使用上の注意点

ファイル引数でリビジョン指定子を使用できるか? ファイル引数でリビジョン範囲を使用できるか? 最低限必要なアクセスレベル

はい

はい

read

  • クライアントワークスペースビューが最後の同期から変更されている場合は、 次の同期のときに、ワークスペースビューを通して見えなくなっている (リビジョン範囲が使用されていない場合)ファイルがクライアントワークスペースから削除され、 以前は見えなかったディポファイルがクライアントワークスペースにコピーされます。

    デフォルトでは、ワークスペース内の空のディレクトリからからすべてのファイルが削除されても ディレクトリ自体は削除されません。 同期するときに空のディレクトリを削除するには、 p4 clientフォーム内の rmdirオプションを有効にします。

  • ユーザが、Helixサーバの管理外で、 OSのコマンドにより いずれかのファイルを書き込み可能にすると、 通常p4 syncはこれらのファイルを上書きしません。 ただし、p4 clientフォームでclobberオプションがオンになっている場合は、 ファイルが上書きされます。

    (パフォーマンスの負荷を最小にして)この動作を避けるには、 -s 「安全な同期」オプションを使用します。 clobberオプションが設定されている場合でも、p4 sync -sHelixサーバの管理外で 変更されたファイルを上書きしません。

  • p4 -I sync -qとして実行すると、 p4 syncコマンドに進捗インジケータが提供されます。
  • 同じファイルを参照する引数が複数指定されている状態で p4 syncコマンドを実行しないでください。例えば、「p4 sync depot/project/...@1000 //depot/project/file.txt@1010」のように指定すると、 リビジョンで予期しない不整合が発生します。

スクリプト

-m maxオプションを-nオプションと組み合わせると、 効果的にスクリプトを作成するのに役立ちます。 例えば、p4 sync -n -m 1のようなコマンドはファイルの同期を行いませんが、 同期するべきファイルがある場合には出力に1行のみ表示され、 そうでなければワークスペースが最新であることを示すメッセージが表示されます。 -m 1オプションを指定しなかった場合、 出力が数千行になる可能性があります。その場合、すべての行が破棄されます。

-Lオプションは、 スクリプトまたは自動レポート処理で使用することが意図されています。ファイル引数は完全なディポシンタックスで記述し、 有効なリビジョン番号を伴っていなければなりません。これらの必要条件を満たさないファイル指定は、 暗黙的に無視されます。 このオプションを使用すると、リストの処理が速くなります。

並列処理

転送するファイルの数に応じて、p4 syncコマンドは実行に時間がかかる場合があります。 このコマンドで複数のスレッドを使用してファイルを転送することにより、 処理を速くすることができます。並列処理が効果的なのは、次のような場合です。

  • ネットワークの距離が長く 待機時間が長い場合
  • 単一のTCPフローを使用した、帯域幅を十分に活用できないネットワーク構成の場合
  • クライアントでファイルの解凍にかなりの作業を必要とする 大規模な圧縮バイナリファイルを使用している場合

以下のいずれかを実行します。

  • net.parallel.threadsnet.parallel.maxの両方を設定し、自動並列同期 を有効にします。
    • 例えば、net.parallel.max=40net.parallel.threads=3を構成すると、p4 syncコマンドは自動的に3つのスレッドを使用します。
  • net.parallel.threadsを設定解除し、net.parallel.max1より大きい値に設定し、 --parallelオプションをp4 sync コマンドに使用することにより、並列同期を手動で実行できます。
    • 例えば、net.parallel.threadsを設定解除し、net.parallel.max=40を設定する場合、並列スレッドの数は240の範囲内になります。12個のスレッドを並列で実行するには、コマンドラインで
      p4 sync --parallel=threads=12と入力します。
    注意
    • net.parallel.max構成変数の値は 0100の範囲で設定できます。値0または1を設定すると、 並列処理は無効になります。1より大きい値を指定すると、 指定したレベルまで並列処理が有効になります。
    • net.parallel.max=40に設定した場合、net.parallel.threadsの値は40以下にする必要があります。並列スレッドのリクエスト数がnet.parallel.maxで設定された値を超える場合、 スレッドは許可されている最大数まで実行されます。
  • --parallelオプションを使用すると、 並列処理を実行する方法 を指定できます。

    • minおよび/またはminsizeサブオプションを使用すると、 同期の際に少なくともmin個のファイル または少なくともminsizeバイトが送信されない限り、 並列処理を行わないように指定できます。
    • batchおよび/またはbatchsizeサブオプションを使用すると、 1回で処理するファイル数またはバイト数を指定できます。 バッチサイズを小さく設定すると、ネットワークは最適に使用できますが、 データベースリソースに負荷がかかります。

    サブオプションは任意の順序で指定できます。

並列処理の動作は、次を使用して制御できます。

ストリームを使用する

以下に示す両方の条件に該当するとします。

  • クライアントワークスペース内のStream:フィールドの値が正しいストリームとして設定されている
  • StreamAtChange:フィールドが、特定のチェンジリスト番号を指している

この場合、p4 syncコマンドを実行すると、該当するチェンジリストが作成された時点で使用可能だったファイルのリビジョンに対して、ワークスペースが同期されます。

コマンドを再試行する

信頼されていないネットワークでは、再試行の回数と、 ネットワークがタイムアウトしたものと Helixサーバアプリケーションが想定するまでの時間の長さを指定することができます。 ワークスペースのP4CONFIGファイルにより、 またはコマンドラインからコマンドを1つずつ実行して net.maxwaitを設定し、 -r nに再試行の回数を指定します。 ただし、nは再接続を試みる回数を示します。

次のコマンドは、ユーザのワークスペースの同期が中断された場合に、 同期を3回まで再試行します。3回目に60秒間でタイムアウトすると、 コマンドは失敗します。

$ p4 -r3 -vnet.maxwait=60 sync

タイムアウトして再試行されるコマンド(ネットワーク接続が出力行の途中で 失われた場合など)の出力形式は保証されないため、 標準入力から読み込みを行うコマンドに-rを使用するのは避けてください。

p4 sync

クライアントビューを通してマッピングされたとおりに、 すべてのファイルの最新リビジョンを、ディポからクライアントワークスペースにコピーします。

そのファイルが既にクライアントワークスペースで作業状態になっている場合や、 そのファイルの最新リビジョンがクライアントワークスペースにある場合は、 コピーされません。

p4 sync file.c#4

file.cの4番目のリビジョンをクライアントワークスペースにコピーします。 例外は上記と同じです。

p4 sync //depot/proj1/...@21

クライアントビューを通してマッピングされたとおりに、 //depot/proj1ディレクトリ内の全ファイルを、 ディポからクライアントワークスペースにコピーします。

最新リビジョンはコピーしないで、 チェンジリスト21がサブミットされた後にディポ内にあるファイルのリビジョンを使用してください。

p4 sync @labelname

labelnamep4 labelによって作成されたラベルで、 さらにp4 labelsyncによってファイルが割り当てられている場合、 labelnameによって指定されたファイルおよびそのリビジョンレベルが、 ワークスペースに同期されます。

ただし、labelnameにリストされているファイルであっても、 ワークスペースビューに存在しないファイルは、ワークスペースにコピーされません。

また、labelnameにリストされていないファイルは、 ワークスペースから削除されます。 (@labelnameは、 labelnameで指定されたリビジョンを含め、 それまでのすべてのリビジョンに適用されます。これには、 リストにないファイルの存在しないリビジョンも含まれます。)

p4 sync @labelname,@labelname

p4 sync @labelnameと同様にラベルの内容をワークスペースに同期しますが、 ワークスペースでラベルが付いていないファイルは現状のままになります。

(リビジョン範囲@labelname,@labelnameは、 ラベル名そのもので指定されたリビジョンのみに適用されます。リストにないファイルの存在しないリビジョンは除外されます)

p4 sync @2018/06/24

2018年6月24日0:00現在のディポの内容を、 ワークスペースに同期します。(6月23日に実施されたすべての変更を含みます。)

p4 sync status%40june1st.txt

文字の16進値のASCII表現を使用して、 Helixサーバの ワイルドカードを含むファイル名を同期します。 この例では、 クライアントワークスペース内のファイルはstatus@june1st.txtです。

詳しくは、「ファイル名とエンティティに関する文字の制限」を参照してください。

p4 sync file.c#none

または

p4 sync file.c#0

file.cの存在しないリビジョンに同期して、 ファイルをワークスペースから削除します。

p4 sync ...#none

または

p4 sync ...#0

すべてのファイルの存在しないリビジョンに同期して、 ワークスペース内のすべてのファイル(Helixサーバが 制御しているファイル)を削除します。

関連コマンド

クライアントワークスペースにあるファイルを作業状態にし、 それをチェンジリストにリストする

p4 add
p4 edit
p4 delete
p4 integrate

クライアントワークスペースにあるファイルに対する変更を、 ディポにコピーする

p4 submit

クライアントワークスペースに同期したファイルとリビジョンの一覧を参照する

p4 have