Helix Core P4コマンドリファレンス (2019.1)

p4 submit

作業中チェンジリストとその作業中チェンジリストに含まれているファイルをディポにコミットする場合や、作業状態のストリーム仕様をサブミットする場合に、このコマンドを使用します。

構文


p4 [g-opts] submit [-r -s] [-f submitoption] [-b | --noretransfer 0|1]
p4 [g-opts] submit [-r -s] [-f submitoption -b] file
p4 [g-opts] submit [-r] [-f submitoption -b] [-So] -d description
p4 [g-opts] submit [-r] [-f submitoption -b] [-Sx] -d description [file]
p4 [g-opts] submit [-r] [-f submitoption] [-b | --noretransfer 0|1] -c change
p4 [g-opts] submit -e shelvedchange[-b]
p4 [g-opts] submit -i p4 [g-opts] submit [-r -s] [-f submitoption -b] --parallel=threads=N[,batch=N][,min=N]

説明

p4 addp4 editp4 delete、またはp4 integrateを使用してファイルを作業状態にすると、そのファイルはchangelistにリストされます。 p4 submitを使用してチェンジリストをディポに送らない限り、ユーザがファイルに加える変更は、クライアントワークスペースコピー内のみで実行されます。

サブミットされるファイルに加えて、作業中のストリームの仕様もサブミットされます。 ファイルのみをサブミットし、作業中のストリームはサブミットしないようにするには、p4 submit -aFを実行します。 作業中のストリームの仕様についての詳細は、p4 streamを参照してください。

デフォルトでは、デフォルトチェンジリスト内でファイルが作業状態になりますが、新しい番号付きチェンジリストをp4 changeで作成することもできます。

  • デフォルトチェンジリストをサブミットするにはp4 submitを使用します。
  • 番号付きチェンジリストをサブミットするにはp4 submit -c changelistを使用します。

    -cオプションを使用すると、番号付きチェンジリストの説明を変更することもできます。

デフォルトでは、チェンジリスト内のすべてのファイルがディポにサブミットされ、editaddbranchを目的としたファイルの作業状態は、ファイルへの変更の有無にかかわらず、サブミットによって解除されます。 このデフォルト動作を変更するには、自分のワークスペースのp4 clientフォームで[SubmitOptions:]フィールドを設定します。 自分のワークスペースの[SubmitOptions:]の設定をコマンドラインから上書きするには、p4 submit -f submitoptionを使用します。

p4 submitをデフォルトチェンジリストとともに使用すると、EDITOR(またはP4EDITOR)の環境変数で定義したエディタ内に編集用のフォームが表示されます。 フォームからファイルを削除することによりチェンジリストからファイルを削除できますが、これらのファイルは次のデフォルトチェンジリスト内で作業状態のままとなります。 ファイルを作業状態から解除し、すべてのチェンジリストから除去するには、p4 revertを使用します。

すべてのチェンジリストにはStatus:フィールドがあります。 このフィールドの値はpendingまたはsubmittedです。

  • サブミット済みチェンジリストは、p4 submitで正常にサブミットされているチェンジリストです。
  • 作業中チェンジリストは、ユーザによって作成されており、まだ正常にサブミットされていないチェンジリストです。

チェンジリストの説明をコマンドラインから指定するには、-dオプションを使用します。 説明変更ダイアログは表示されません。 -dオプションはデフォルトチェンジリストにのみ作用し、番号付きチェンジリストでは機能しません。

ディポ内のファイルの場所は、このファイルのローカルファイルシステム内での場所と、p4 clientフォームで指定されるクライアントワークスペース定義によって決定されます。 詳細については、『Helix Coreサーバユーザーガイド』の「Configure clients」章を参照してください。

サブミット処理

p4 submit はチェンジリスト単位で機能します。チェンジリスト内のすべてのファイルがディポ内に保存されるか、1つも保存されないかのいずれかになります。 p4 submitはチェンジリスト単位で実行されるため、ファイルを目的別にチェンジリストにグループ化することができます。 例えば、1つのチェンジリストに、1つのバグを修正する3つのファイルへの変更を含ませることができます。 中断された場合、チェンジリスト内のファイルが1つでも現在のクライアントワークスペースで見つからない場合、他のクライアントワークスペース内で(p4 lockによって)ファイルが1つでもロックされている場合、または衝突解決が必要でまだ解決されていない状態にある場合、p4 submitは失敗します。

p4 -I submitとして実行すると、p4 submitコマンドに進捗インジケータが提供されます。

チェンジリストをコミットする前に、p4 submitは少しの間、サブミットされるすべてのファイルをロックします。 ロックもサブミットもされないファイルが存在する場合、そのファイルは番号付き作業中チェンジリストにおいて作業状態のままになります。 デフォルトでは、サブミット操作に失敗したファイルは、submit.unlocklocked構成可能変数が設定されていない限り、ロックされたままになります。 submit.unlocklockedを設定すると、サブミットの前にファイルを手動でロックした場合であっても、ファイルのロックが解除されます。

デフォルトチェンジリストの処理中にp4 submitが失敗すると、デフォルトチェンジリストにはチェンジリストの次の続き番号が割り当てられ、デフォルトチェンジリストは空になります。 サブミットに失敗したチェンジリストは、問題を解決した後、割り当てられた番号で再度サブミットする必要があります。

p4 submitが失敗すると、ファイルの一部またはすべてがサーバにコピーされる可能性があります。 デフォルトでは、構成可能変数submit.noretransferが設定されていない場合、失敗したサブミットを再試行するとこれらのファイルはすべて転送されます。この場合、サーバはファイルが既に転送されているかどうかを検出し、失敗したサブミットが再試行される際にすべてのファイルを再転送しないようにします。 --noretransferオプションを使用して構成可能変数submit.noretransferを上書きすることにより、ユーザは現在のサブミット操作時における再転送の動作を選択できるようになります。

並列サブミット

サブミットのプロセス中にファイルを同時に転送できます。 リソースが十分にある場合、複数のファイルを同時に転送することにより、submitコマンドの実行が速くなることがあります。 この機能を使用するには、サーバとクライアントのバージョンを両方とも2015.2以降にアップグレードする必要があります。 このセクションをよく読んで、この機能を適切に使用してください。

並列サブミットを有効にするには、構成可能変数net.parallel.maxを設定します。

  • threads=Nを指定し、独立したネットワーク接続を指定した数のみ使用して、ファイルが同時に送信されるようにします。 スレッドは作業をバッチで取得します。 batch=Nを指定し、バッチ内のファイル数を制御します。

    送信するバイト数が小さすぎる場合、並列ファイル転送は開始されません。 minオプションを使用して、並列サブミットの最小ファイル数を制御します。

    net.parallel.max構成変数が設定されていない場合、並列スレッドを使用せずにコマンドが実行されます。

    要求された並列スレッドの数がnet.parallel.maxで設定された値を超えている場合、許可されている最大数のスレッドを使用してコマンドが実行されます。

  • エッジサーバからコミットサーバへの並列サブミットでは、標準プルスレッドを使用してファイルを転送します。 管理者は以下を実行して、プルスレッドがコミットサーバで実行できることを確認する必要があります。

    • コミットサーバが使用するサービスユーザが、エッジサーバにログインしていることを確認します。
    • エッジサーバのサーバ仕様のExternalAddressフィールドが、コミットサーバのプルスレッドがエッジサーバに接続するために使用するアドレスに設定されていることを確認します。

      クライアントがエッジサーバと通信する際に使用するネットワークとは異なるネットワーク上でコミットサーバとエッジサーバが通信している場合、ExternalAddressフィールドには、コミットサーバからの接続に使用されるエッジサーバのIPアドレスとポート番号を指定する必要があります。 また、エッジサーバは2つ以上のネットワーク上で待機する必要があります。

  • p4 submit -eを実行するためにアーカイブを共有している場合、および進捗インジケータが使用されている場合、--parallelオプションは無視されます。

    注意

    p4 submitの自動並列処理を有効にするには、net.parallel.maxnet.parallel.submit.threads両方の構成可能変数にゼロではない値をセットします。 以下に例を示します。

    p4 configure set net.parallel.max=50

    p4 configure set net.parallel.submit.threads=3

    自動並列処理を有効にすると、次の構成可能変数はデフォルト値0ではなくなります。

    構成可能変数 新しい値 説明
    net.parallel.batch 8 p4 syncの、1つのバッチ内のファイル数
    net.parallel.batchsize 512KB p4 syncの、1つのバッチ内のバイト数
    net.parallel.min 9 p4 syncの、1つのバッチ内の最小ファイル数
    net.parallel.minsize 576KB p4 syncの、並列同期の最小バイト数
    net.parallel.submit.batch 8 p4 submitの、1つのバッチ内のファイル数
    net.parallel.submit.min 9 または、p4 submitの、1つのバッチ内の最小ファイル数

    この場合、p4 submitコマンド(--parallelオプション指定なし)に構文バリアントを使用することができ、処理は並列で自動的に行われます。

    • --parallelオプションを明示的には使用せずnet.parallel.*構成可能変数が設定されている場合、その構成可能変数の値は、コマンドラインで指定した構成可能変数の値によりオーバーライドされます。
    • net.parallel.submit.threads構成可能変数を設定しないことで、自動並列サブミットをオフにすることができます。
    • 並列サブミット構成可能変数を無効にするには、p4 submit --parallel=0と指定します。

パフォーマンスと並列サブミット

並列サブミットを使用すると、以下のような場合にパフォーマンスが向上します。

  • パス上のいずれかで大幅なネットワーク遅延が発生しているとき、サブミットされたファイルコンテンツがここを通ってクライアントから保存先のリポジトリに送信される場合。

    これには、プロキシとサーバ間やエッジサーバとコミットサーバ間の大幅なネットワーク遅延が含まれます。 このような構成で並列サブミットを使用する場合、ネットワーク遅延に関連する固有のTCP遅延は同時に発生します。並列サブミットを使用しない場合は連続的に発生します。

  • サブミットしたファイルを転送する際に大量のリソースを必要とし、このようなリソースが使用可能な場合。

    例えば、クライアントからサーバに転送する際にctextまたはバイナリファイルのコンテンツを圧縮するため大量のCPUサイクルが必要となる場合、十分なCPUコアを使用できる限り、ファイルコンテンツの圧縮は、ctextまたはバイナリファイルを圧縮する並列サブミットスレッドごとに1つのCPUコアで実行されます。

また、並列サブミットを使用してもパフォーマンスが大きく改善されない場合があります。

  • 環境に応じてネットワークの帯域幅は大切なリソースになります。

    ネットワーク遅延が最小限に抑えられている場合、使用可能なネットワークの帯域幅を使用する際に、大量の並列サブミットスレッドが必要にならない可能性があります。 使用可能なネットワークの帯域幅が使用されると、並列サブミットスレッドを追加してもパフォーマンスが向上しないことがあります。 これが顕著に表れるのは、ubinaryファイルを転送する場合など、ネットワークの帯域幅リソースのみが必要となるファイルコンテンツの転送時です。

  • batchおよびmin引数に小さい値を使用し、--parallelオプションを指定することが、実際的に役立つ場合があります。

    例えば、並列サブミットを使用して少数の大規模なctextまたはバイナリファイルをサブミットする際、十分なCPUとネットワークの帯域幅リソースを使用できる場合は、並列サブミットスレッドごとに少数のファイルを転送することが最適なパフォーマンスにつながることがあります。 均等に分けたファイルを並列サブミットで転送する際、そのファイル数が指定した並列サブミットスレッド数(デフォルトでは4)を上回る場合は、batch引数をデフォルトの8より小さい値に設定する必要がある場合があります。 (例えば、4つの並列サブミットスレッドを使用して8つの大規模なctextまたはバイナリファイルをサブミットする場合、batch引数は2に設定する必要があります。)したがって、min引数の値(デフォルトは9)は、サブミットする大規模なctextまたはバイナリファイルの数以下に設定する必要があります。

    一方、batch引数に小さい値を使用すると、並列サブミットを使用して多数の小さいファイルをサブミットする際のパフォーマンスが低下する場合があります。 各並列サブミットスレッドがバッチごとにdb.sendqに頻繁に問い合わせるために生じるサーバのオーバーヘッドが、db.sendqの同時並行処理に影響する可能性があります。 これは、並列サブミットを使用してサブミットされるファイルのサイズが小さくなるほど、並列サブミットスレッドが処理する次のバッチについて、サーバがより頻繁にdb.sendqに問い合わせるためです。

エッジサーバでサブミットを行う場合のバックグラウンドアーカイブファイル転送機能

エッジサーバで-bオプションを使用すると、エッジサーバからコミットサーバへのアーカイブファイルの転送処理をバックグラウンドで実行することができます。 コミットサーバ上のサブミットプロセスにより、転送処理がスケジュール設定され、そのスケジュールに従って転送処理が自動的に実行されるため、転送処理が完了するまで待機する必要はありません。 転送元のエッジサーバ上のアーカイブファイルは、コミットサーバ上のサブミットプロセスによって起動されたプルスレッドを経由して、コミットサーバに転送されます。 ktextファイルのアーカイブファイルは、バックグランドで転送されるのではなく、通常通り順に転送されます。これは、コミットサーバ上での作業内容に応じて、アーカイブファイルの内容が異なるためです。

この機能を使用して、保留状態の変更ではなく作業状態の変更をサブミットすると、edge-contentトリガが起動する前にchange-submitトリガが起動します。 管理者は、コミットサーバ上でプルスレッドを実行できるかどうかを確認する必要があります。 コミットサーバからエッジサーバに接続する場合、エッジサーバのIPアドレスとポート番号が使用されます。このIPアドレスとポート番号は、エッジサーバ仕様の「ExternalAddress:」フィールドで指定する必要があります。

submit.allowbgtransfer構成可能変数は、コミットサーバを含め、アーカイブファイルバックグラウンド転送機能を使用するすべてのサーバに対して設定する必要があります。 アーカイブファイルバックグラウンド転送機能は、グラフディポではサポートされていません。 別のファイル転送機能や「lbr.replication=shared」オプションが設定されている場合、上記の構成可能変数は無視されます。 このコマンドオプションは、noretransferオプションと組み合わせて指定することはできません。 noretransferオプションが指定されている場合、lbr.replicationオプションは無視されます。

アーカイブファイルバックグラウンド転送機能を有効にするには、この機能を実行するエッジサーバ上で、submit.allowbgtransfer構成可能変数の値を「1」に設定します。 この構成可能変数を設定し、-bオプションを使用するために必要な設定を行うことにより、該当するエッジサーバで実行されるすべてのサブミット処理で、アーカイブファイルバックグラウンド転送機能が使用されます。コマンドラインで-bオプションを指定する必要はありません。

ストリームとp4 submitコマンド

バージョン2019.1には、作業状態のストリーム仕様のみをサブミットするための-Soオプションが導入されています。

デフォルトの場合、作業状態のストリーム仕様がサブミットされることはありません。-Sxオプションを使用すると、この動作を明示的に指定することができます。

詳細については、ストリームをサブミットする場合のコマンド例を参照してください。

フォームフィールド

フィールド名 タイプ 説明

Change:

読み取り専用

チェンジ番号、またはデフォルトチェンジリストをサブミットする場合はnew

Client:

読み取り専用

現在のクライアントワークスペースの名前です。

User:

読み取り専用

現在のHelixサーバユーザの名前。

Status:

読み取り専用、値

pendingsubmittednewのいずれかです。 ユーザは編集できません。

ステータス:

  • newは、チェンジリストが作成されている状態です。
  • pendingは、チェンジリストは作成されていますが、p4 submitを使用してディポにサブミットされていない状態です。
  • submittedは、チェンジリストの内容がp4 submitを使用してディポに保存されている状態です。

Description:

書き込み可能

このチェンジリストに関するコメント。 この値は必ず変更しなければなりません。

Jobs:

リスト

このチェンジリストで修正完了となるジョブのリスト。 適切なジョブがない場合、このフィールドは表示されません。

デフォルトでは、p4 userフォームで指定したジョブビュー基準に適合するジョブが一覧表示されますが、一覧から削除することもできます。

Type:

書き込み可能、値

変更のタイプ: restrictedまたはpublic

restrictedタイプの保留状態または確定済みのチェンジリストには、チェンジリストを所有していないユーザ、またはチェンジリスト内の1つ以上のファイルにリスト権限を持っていないユーザがアクセスすることはできません。 restrictedタイプの作業中(保留解除された)チェンジリストには、チェンジリストの所有者でないユーザがアクセスすることはできません。 publicタイプの変更はこれらの制限なしで表示されます。

Files:

リスト

このチェンジリストにサブミットしようとしているファイルの一覧。 この一覧からファイルを削除してもかまいませんが、ファイルの変更や追加はできません。

ファイルを処理する場合のオプション

-b

上記のセクション'エッジサーバでサブミットを行う場合のバックグラウンドアーカイブファイル転送機能'を参照してください。

-c change

番号がchangeであるチェンジリストをサブミットします。

チェンジリストへの番号の割り当ては、p4 changeによりユーザが手動で行うか、デフォルトチェンジリストのサブミットに失敗したときにHelixサーバが自動で行うかのいずれかになります。

-d description

コマンドラインで指定されたdescriptionの値に対応するデフォルトのチェンジリストを即時にサブミットし(ストリームが作業状態になっている場合は、そのストリームもサブミットされます)、対話式フォームをバイパスします。 このオプションはスクリプト実行時に有用ですが、ジョブの追加やデフォルトチェンジリストの修正はできません。

-e shelvedchange

チェンジリスト番号がshelvedchangeである保留状態のチェンジリストをサブミットします。

-eオプションを付けると、ファイルの転送やワークスペースの変更が行われずに保留状態のチェンジリストがサブミットされます。 保留状態の変更はサブミット実行ユーザが所有している必要がありますが、ワークスペースは異なっていても構いません。 ターゲットストリームに保留されたファイルは、ターゲットストリームにマッピングされたストリームワークスペースによってのみサブミット可能です。 また、ストリームターゲット以外に保留されたファイルはストリームワークスペースによってサブミットできません。

保留状態の変更をサブミットするには、その変更内にあるすべてのファイルが最新であり、衝突解決されている必要があります。 どのワークスペースにおいても、ファイルは同じ番号の変更では作業状態になっていないはずです。 p4 clientフォームのSubmitOptions:設定(revertunchangedなど)は無視されます。 サブミットが成功すると、変更およびファイルの保留を解除したり、改めてサブミットしたりすることはできません。

これは分散環境においてエッジサーバの伝播属性を持つファイルに対してサポートされる唯一のサブミットオプションです。

-f submitoption

p4 clientフォームのSubmitOptions:設定を上書きします。 有効なsubmitoption値は

  • submitunchanged

    すべての作業状態のファイル(変更の有無にかかわらず)がディポにサブミットされます。 これはHelixサーバのデフォルトの動作です。

  • submitunchanged+reopen

    すべての作業状態のファイル(変更の有無にかかわらず)がディポにサブミットされ、すべてのファイルが自動的にデフォルトチェンジリストで再度作業状態にされます。

  • revertunchanged

    内容またはファイルタイプが変更されたファイルのみがディポにサブミットされます。 変更されていないファイルは、元に戻されます。

    注意

    DVCSの場合は、revertunchangedがデフォルト設定になります。

  • revertunchanged+reopen

    内容またはファイルタイプが変更されたファイルのみがディポにサブミットされ、デフォルトチェンジリストで再度作業状態にされます。 未変更のファイルは元に戻しますが、デフォルトチェンジリストでは作業状態にされません

    注意

    2つのrevertunchangedオプションは、所有リビジョンが取得された状態までファイルを戻さないため、p4 sync -fを実行して所有リビジョンが取得された状態まで戻す必要があります。

  • leaveunchanged

    内容またはファイルタイプが変更されたファイルのみがディポにサブミットされます。 未変更のファイルはデフォルトチェンジリストに移動されます。

  • leaveunchanged+reopen

    内容またはファイルタイプが変更されたファイルのみがディポにサブミットされます。 未変更のファイルはデフォルトチェンジリストに移動され、変更済みのファイルはデフォルトチェンジリストで再度作業状態にされます。 このオプションはsubmitunchanged+reopenと似ていますが、未変更のファイルはディポにサブミットされません。

-i

チェンジリスト仕様を標準入力から読み込みます。 入力はp4 submitのフォームで使用されているのと同じ形式でなければなりません。

--noretransfer 0|1

サブミット操作が失敗した場合に、サーバ上で既にアーカイブされているファイルの再転送を禁止するには、このオプションの値を「1」に設定します。

サブミット操作が失敗した場合に、サーバ上のすべてのファイルを再転送するには、このオプションの値を「0」に設定します。 この設定は、現在のサブミット操作の構成可能変数submit.noretransferの設定を上書きします。

--parallel

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

  • threads=nは、n個の独立したネットワーク接続使用して、ファイルを同時に送信します。 指定したスレッドは作業をバッチで取得します。
  • batch=nは、1つのバッチ内のファイル数を指定します。
  • min=nは、並列同期の最小ファイル数を指定します。 同期するバイト数が小さすぎる場合、並列ファイル転送は開始されません。

詳しくは、並列処理を参照してください。

-r

サブミット後、デフォルトチェンジリストのedit目的に対してファイルを作業態にします。 add目的またはedit目的の作業状態が、サブミット後も引き続き作業状態になります。

-s

チェンジリストのサブミット時に、デフォルトの状態であるclosedではなく任意の状態をジョブに割り当てられるようにします。 ジョブを未変更のままにしておくには、特殊な状態であるsameを使用します。

新規のチェンジリストでは、修正完了の状態としてignoreという特殊な状態が表示されます。 (状態が変更されなければ、ジョブはチェンジリストをサブミットしても修正完了になりません。)

このオプションは、p4 fix-sと合わせて使用します。これは欠陥追跡システムと連携して使用することを目的としたオプションです。

file

パスを指定するための単一のパラメータ。「​」をワイルドカードとして使用することができます。

このファイルパターンのパラメータは、デフォルトチェンジリストのサブミット時のみに使用できます。 指定したパターンに一致するデフォルトチェンジリスト内のファイルはサブミットされます。 ファイルパターンに一致しないファイルは、次のデフォルトチェンジリストに移動されます。

g-opts

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

ストリームを処理する場合のオプション

-So

ストリーム仕様のみがサブミットされます。 ファイルリストが元に戻ることはありません。

-Sx

指定したファイルリストを元に戻す際に、作業状態のストリーム仕様がその処理から除外されます。

使用上の留意点

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

使用不可

使用不可

write

ストリームをサブミットする場合のコマンド例

p4 submit

現在の作業中ストリーム仕様を含め、デフォルトのチェンジリストがサブミットされます。
p4 submit -c 4739 現在の作業中ストリーム仕様を含め、番号付きチェンジリストがサブミットされます。
p4 submit -So 作業中ストリーム仕様のみがサブミットされます。
p4 submit -Sx デフォルトのチェンジリストがサブミットされ、作業中ストリーム仕様はサブミットされません。

p4 submit foo bar

p4 submit -Sx foo bar

指定したチェンジリストがサブミットされ、作業中ストリーム仕様はサブミットされません。

関連コマンド

新しい番号付きチェンジリストを作成する

p4 change

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

p4 add
p4 edit
p4 delete
p4 integrate

あるチェンジリストから別のチェンジリストへ1つのファイルを移動する

p4 reopen

あるファイルをすべてのチェンジリストから除去し、そのファイルを以前の状態に戻す

p4 revert

ある基準に適合するチェンジリストの一覧を参照する

p4 changes

あるチェンジリストの完全な記述を読み込む

p4 describe

ディポからクライアントワークスペースへファイルを読み込む

p4 sync

クライアントワークスペース内のファイルと、ディポ内のファイル間のマッピングを編集する

p4 client