p4 submit

概要

作業中チェンジリストと作業中チェンジリストに含まれているファイルをディポにコミットします。

構文


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

解説

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

デフォルトでは、デフォルトチェンジリスト内でファイルが作業状態になりますが、新しい番号付きチェンジリストを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フォームで指定されるクライアントワークスペース定義によって決定されます。詳細については、『P4ユーザーズガイド』の「ワークスペースビューの限定」を参照してください。

サブミット処理

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.1にアップグレードする必要があります。このセクションをよく読んで、この機能を適切に使用してください。

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

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

    送信するバイト数が小さすぎる場合、並列ファイル転送は開始されません。min=Nを指定し、並列サブミットの最小ファイル数を制御します。

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

    • コミットサーバが使用するサービスユーザが、エッジサーバにログインしていることを確認します。

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

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

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

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

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

    これには、プロキシとサーバ間やエッジサーバとコミットサーバ間の大幅なネットワーク遅延が含まれます。このような構成で並列サブミットを使用する場合、ネットワーク遅延に関連する固有の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に問い合わせるためです。

フォームフィールド

フィールド名

タイプ

解説

Change:

読み取り専用

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

Client:

読み取り専用

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

User:

読み取り専用

現在のPerforceユーザの名前。

Status:

読み取り専用、値

pendingsubmitted、またはnewのいずれか。ユーザは編集できません。

ステータスは、チェンジリストを作成したときはnew、チェンジリストを作成したがまだp4 submitでディポにサブミットしていないときはpendingp4 submitでディポ内にチェンジリストの内容を保存したときはsubmittedです。

Description:

書き込み可能

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

Jobs:

リスト

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

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

Type:

書き込み可能、値

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

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

Files:

リスト

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

オプション

-c change

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

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

-d description

コマンドラインからdescriptionを指定してデフォルトチェンジリストをただちにサブミットし、対話式のフォームを表示させません。このオプションはスクリプト実行時に有用ですが、ジョブの追加やデフォルトチェンジリストの修正はできません。

-e shelvedchange

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

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

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

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

-f submitoption

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

  • submitunchanged

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

  • submitunchanged+reopen

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

  • revertunchanged

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

  • revertunchanged+reopen

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

  • 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

“グローバルオプション”」を参照してください。

使用上の留意点

ファイル引数にリビジョン指定子を使えるか?

ファイル引数にリビジョン範囲を使えるか?

最低限必要なアクセスレベル

なし

なし

write

p4 submit

デフォルトチェンジリストをサブミットします。このチェンジリスト内のファイルのユーザリビジョンは、ディポ内に保存されます。

p4 submit -c 41

チェンジリスト41をサブミットします。

p4 submit *.txt

デフォルトチェンジリスト内で拡張子.txtを持つファイルのみをサブミットします。デフォルトチェンジリスト内の他のファイルをすべて、次のデフォルトチェンジリストに移します。

p4 submit -d "header files" *.h

デフォルトチェンジリスト内で拡張子.hを持つファイルのみを"header files"というコメントを付けてサブミットします。チェンジリストフォームは表示されません。デフォルトチェンジリスト内の他のファイルをすべて、次のデフォルトチェンジリストに移します。

関連コマンド

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

p4 change

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

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

p4 reopen

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

p4 revert

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

p4 changes

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

p4 describe

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

p4 sync

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

p4 client