フェッチとプッシュ
フェッチとプッシュは、複数のユーザが同時に作業を行う分散ワークフローにおける重要なコマンドです。これらのコマンドにより、以下に示す主要なタスクを実行することができます。
- 個人サーバのチェンジリストを共有サーバにコピーする
- 他の個人サーバからプッシュされたチェンジリストを共有サーバからフェッチする
- 共有サーバの全体的なリポジトリのサブセットを取得して使用する
- 2つの個人サーバ間で作業内容をコピーする
管理者は、フェッチとプッシュを使用して、複数の共有サーバ間でチェンジリストをコピーすることもできます。
分散バージョン管理モデルにおけるフェッチとプッシュの位置付けは、従来のHelixサーバ中央サーバモデルにおける同期とサブミットの位置付けと同じです。
クローンとフェッチはすべてのレプリカタイプ(読み取り専用、ビルドファーム、転送レプリカ、エッジサーバ、ワークスペースサーバ、スタンドバイ、転送スタンバイなど)でサポートされます。すべての転送レプリカタイプ(エッジ、転送、転送スタンバイ、ワークスペース)は、プッシュをコミットサーバに自動的に転送することによりプッシュをサポートします。読み取り専用、ビルドファーム、スタンバイの各タイプのレプリカはプッシュを拒否します。
p4 fetch
コマンドを実行すると、指定したファイルセットとその履歴がリモートサーバからローカルサーバにコピーされます。p4 push
コマンドを実行すると、指定したファイルセットとその履歴がローカルサーバからリモートサーバにコピーされます。どちらのコマンドの場合も、一部のファイルだけがフェッチまたはプッシュされることはなく、指定したすべてのファイルがフェッチまたはプッシュされるか、いずれのファイルもフェッチまたはプッシュされないという結果になります。
リモートサーバへのファイル転送の開始後にp4 push
コマンドが失敗した場合、それらのファイルはリモートサーバ上でロックされたままになります。p4 opened
コマンドはlocked
を表示します。他のユーザがこれらのファイルをサブミットすることはできません。p4 push
コマンドをすばやく再試行できない場合は、p4 unlock -r
コマンドを使用してリモートサーバ上でファイルをロック解除できます。
p4 push
コマンドは、プッシュを実行しているサーバにサブミットされなかった変更がある場合は使用できません。最初にこれらの変更を再度サブミットするにはp4 resubmit
コマンドを使用し、変更を望まない場合はp4 shelve -d
で保留ファイルを破棄します。p4 unsubmit
およびp4 resubmit
の詳細については、「ローカル履歴をリライトして衝突を解決する」の例を参照してください。
フェッチまたはプッシュの進行状況を監視するには、-I
オプションをコマンドに渡します。
$ p4 -I fetch
$ p4 -I push