Perforce 統合に関する FAQ

Perforce 専門用語および使用方法に関するよくある質問

Windows
MacOS
Linux

このページでは、関連する専門用語に加えて、Unreal Engine 4 と Perforce の一般的な使用方法を理解するための知識を幅広く提供します。

マージプロセスを簡単にするために、P4V と P4Win に統合可能な自動マージ ツールを作成しました。このページで説明している面倒なステップとベスト プラクティスの幾つかを自動化します。詳細は、Perforce AutoMerge ページを参照してください。

よくある質問 (FAQ)

Perforce での統合、マージ、ブランチとはどういう意味ですか?

3 つとも全部同じ意味で、Integrate コマンドを使って実施されます。ブランチは通常、新しい位置で新規ファイルを作成する統合のことを指します。マージは、既にブランチされた 2 つのファイルの間の統合です。

ファイルをコピーして変更するだけなのに手順が複雑すぎます。

Perforce は実行された全ての変更と統合を検索可能、図式化可能なデータベースで維持します。「手書きで」サーバーのデータベース トラッキングをマージすると、統合が正しく実行された場合に、コード履歴のトラックが不可能になり、ブランチの管理もしずらく、ユーザーにとっても Perforce にとっても難しくなります。簡単な変更に対して解決が恐ろしく難しいファイルの統合を Perforce が拒否する症状です。

チェンジリストを 1 つだけ変更にはどうすればよいですか?

プロセスの可視化のために UI が多数改善されているので、統合する場合は P4V の利用を強くお勧めします。最終的に全てが同じ P4API コールに対して解決するので、 P4V と P4Win は同じ機能対象をサポートしていることになります。

P4V に 1 つの変更を統合するには以下の手順を行います。

  • アクティブなワークスペースに統合先のブランチが含まれていることを確認してください。 * ワークスペースにソース ブランチをインクルードする必要はありません。

  • 統合したいチェンジリストを 右クリック し、[Integrate using submitted changeslist 'change#'..._] を選択します。このようなダイアログが見えるはずです。

P4VIntegrate.jpg

  • [Choose integration method (統合方法の選択)][Use branch specification (ブランチを指定)] を選び、使用するブランチを選択します。

  • ファイルを削除または再追加した場合 三角形のアイコンをクリックして [Advanced options..._(詳細オプション)] とセクションをクリックします。 [Enable integrations around deleted revisions] から適切なオプションを選択します。 一般的に、 ソースファイルを削除するとターゲットファイルも削除されます よくわからないオプションは選択しないでください!

P4IntegrateAdvancedOptions.JPG

  • エラーチェックには必ずプレビュー ボタンを使ってください。エラーがあると統合を完了することができません。 P4V は統合エラーの視覚チェックがサポートされています。 ツリービューには統合されたすべてのファイルが表示されます。統合されなかったファイルは赤でハイライトされます。 赤矢印でエラー間で繰り返すことができます。Description フィールドには、統合の失敗理由がファイル別に表示されます。 普通のフラット ビューから新しいツリー ビューへ切り替えることもできます。 * エラーの原因がわからない場合は、分かる人に助けてもらいましょう。

P4VPreview.JPG

  • 既存の変更がこのマージで絶対に混ざらないように、[New changelist (新規チェンジリスト)] を選択します。

  • [Finish (完了)] をクリックしてチェンジリストを新規作成します。

  • 以下のインストラクション に従って、統合されたファイルを解決します。

  • サブミットする前に 一通りテストしてください。

  • このページで後ほど出てくる チェンジリスト説明ガイドライン の使用を覚えておいてください。

P4Win に 1 つの変更を統合するには以下の手順を行います。

  • [Revision History (リビジョン履歴)] を開き、マージしたいチェンジリストを 右クリック し、[Integrate Using|Branchspec..] を選択します。

  • リストから branchspec を選択します。

  • ファイルを削除または再追加した場合: Options...|Permit deletes/re-adds を選択する。 [deletes only (削除のみ)][re-adds only (再追加のみ)]、または両方のラジオボタンを適宜選択する。 * よくわからないオプションは選択しないでください!

  • P4Win にはプレビューをビジュアル化するツールは付いていないので、出力ウィンドウでテキストを読む必要があります。 * この部分についてわからない場合は、分かる人に助けてもらいましょう。

  • 既存の変更がこのマージで絶対に混ざらないように、[New changelist (新規チェンジリスト)] を選択します。

  • [Finish (完了)] をクリックしてチェンジリストを新規作成します。

  • 以下のインストラクション に従って、統合されたファイルを解決します。

  • サブミットする前に 一通りテストしてください。

  • このページで後ほど出てくる チェンジリスト説明ガイドライン の使用を覚えておいてください。

ファイルを早急に解決する一番安全な方法は何でしょうか?

統合された各ファイルは、チェックインする前に解決していなければなりません。ややこしいコンフリクトの場合は、オリジナル ファイルの助けが必要な場合があります。プロセスを簡略化するため、Perforce にはリストを削減するために自動解決簡略マージのオプションが幾つか提供されています。P4V と P4Win は両方このオプションを利用することができます。以下の手順で行うと安全です。 1. Safe automatic_ resolve - 最後のマージ以降ファイルが 1 つのブランチのみで変更されている場合、自動解決します。変更されたファイルをコピーするだけなので常に安全です。 1. Automatic_ resolve - ファイルは両方のブランチで変更されているがコンフリクトしない場合、変更を解決します。 1. Interactive_ resolve - 両方のブランチでの変更がコンフリクトする場合、残されたファイルがハード ファイルになります。

* 上記の処理を行うために、以下のようなマージツールを使用します。
    * [Araxis Merge](http://www.araxis.com/)、あるいは 
    * P4WinMerge

P4VResolve.jpg

注記:

  • Safe Automatic resolve は、ほとんどのファイルを自動処理します。

  • インタラクティブにファイルをマージする場合は注意が必要です。分からない場合は質問しましょう。

両方のブランチで変更されたファイルのみが残ります。

P4V は発見された変更とコンフリクトの集計カウントを表示し、支援するツール一式を提供します (open、diff、history、time lapse)。

P4VResolveIndividual.jpg

用意ができたら、Run Merge ツール をクリックし、登録したマージツールを実行して実際にマージを行います。P4V にビルトインされているマージツールを推奨します。ソース、ベース、ターゲット、マージ結果、各変更のソースに対するカラーコードを常に表示する 4 つのペインで構成されているからです。他のマージツールはほとんどが 3 ペイン表示なので、マージを実行すると基本となるバージョンが上書きされてしまいます。P4Merge で使われているカラー / アイコン スキームの詳細については、P4Merge Help Viewer (マージ中に F1 を押す) をご覧ください。

P4VMerge.jpg

すべてのファイルが解決すれば、変更をサブミットすることができます。

統合を完了した際に、どのようなコメントをいれるべきでしょうか。

技術的に Perforce が内部データベースで統合をトラックする一方で、コメントに意図を表示すると他の人達がこの変更が他のブランチからの変更であることを理解できます。

登録する際には以下を行います。

  • 統合中のコードを示すセンテンスおよび変更が発生したチェンジリスト範囲を記述します。1 度のサブミッションで統合するチェンジリストは 1 つのみが理想です。統合されたチェンジリストを全部まとめて 1 回のサブミッションで行うと、マージによって生じた問題を後から修正することが大変になります。

  • 変更や修正を行ったら編集しなおしておく - これで誰もが使いやすくなるはずです。少なくとも、オリジナルのチェンジリストからコピー&ペーストのみ行ってください。

統合しなければならない変更が複数あるのですが、これらを 1 回で統合できますか?

統合しないでくたさい。統合されたチェンジリストごとに、別々にサブミッションを行うことをお勧めします。複数のチェンジリストを 1 度に統合することは可能ですが、お勧めしません。複数のチェンジリストを 1 度に統合すると、同じファイル内で変更が重複した場合、マージプロセスが非常に難しくなります。さらに、チェックインせずに 1 つのファイルを複数回統合すると、問題が生じた場合、 1 つの統合を元に戻ることができません。

複雑すぎて解決できないマージがあります。手動で行うべきですか?

変更の統合を Perforce データベースに伝える必要があるので、統合は実行しなくてはなりません。通常通りの統合を実行し、解決の段階で [accept yours (双方の違いを承認)] を選択します。この選択をすると、ローカル ファイルを変更しないまま、これらのファイルの統合が Perforce に伝わります。

そして、チェックインする前に、適切なファイルを編集のために再度開き、新規コードで必要な変更を行います。このようにして、自分のコードラインの中に変更の統合を示すチェンジリストが 1 つ作成されます。

対象のチェンジリストがサブミットされてから、ソース ブランチあるいはデスティネーション ブランチのいずれかのファイルに対し大幅な変更が加わっています。この変更をマージしても大丈夫ですか?

はい。通常は、問題なく動作するはずです。上記のインストラクションに従ってソース ブランチで変更が行われた (または削除された) ためにファイルに大幅な変更がされていたとしても、 Perforce は対象となる変更そのものしか統合しません。もちろん、チェンジリストが古いほど、統合先のブランチでマージ コンフリクトに対処することになります。

チェンジリストではなくファイル (またはファイル一式) を統合してはいけないのですか?

そうすべき正当な理由がない限り、お勧めしません。常に統合は、個々のチェンジリストの選択、統合、テスト、サブミットを経て実施すべきです。直接ファイルを統合すると、そのファイルに統合された変更がすべてソースブランチにマージされます。つまり、いらない変更、あるいは存在しないコードに依存する変更をターゲットブランチに導入してしまう可能性があります。そうならないためにも、必要なチェンジリストだけをマージするようにしてください。

完了時にファイルを変更していなければ、リバートすべきですか?

いいえ。チェンジリストから統合したファイルは、必ず全部チェックインすべきです。ファイルが変更していなくても、それをチェックインすると Perforce データベースは統合情報で更新されます。

Perforce はチェンジリストごとではなく、ファイルごとに統合履歴を格納します。チェンジリストは統合したけれど、リバートするファイルがある場合、一部のみ統合されたものとしてリストされたチェンジリストもあるため、データベースの分析が難しくなります。

チェンジリストを統合しないことに決めました。何かすべきことはありますか?

これがいわゆる NULL Merge です。サブミットした変更がもう一方のブランチでは絶対に必要でなければ、 NULL マージを実行しておくと便利な場合が多いです。NULL マージを事項するには、ファイルを統合し、[accept yours. (双方の違いを承認)] を選択してそれらを解決します。これにより、既に誰かがある変更を確認した上で何も行わなかった、という正式な記録が作成されます。その変更はそのブランチへの統合保留中の変更のリストには含まれないので、ブランチの管理プロセスが簡略化されます。

自分の変更に対し NULL マージの実行が必要かどうかはコードライン ポリシーおよび統合の管理方法によりますので、コードラインの責任者にご確認ください。

NULL マージ実行の際は、チェックインの説明にチェンジリストおよび NULL 統合である事実を記載します。こうしておくこつで、統合記録が後で分析されても混乱しません。

ブランチの設定と逆の方向に統合する方法を教えてください。

Branchspecs を設定して、変更の通常のフローをデフォルトの方向にします。通常これは、ブランチをマージし非推奨する時に行われます。

Perforce は統合中の branchspec の「リバース」がサポートされています:

  • P4V では、[Select branch specification (ブランチ指定を選択)] セクションの緑色の矢印をクリックすればいいのです。統合アイテムスクリーンショト をご覧ください。 * 忘れてしまった場合にはテキストもあります。

  • P4Win はリバース リクエストを自動検知しているようです。 * 同じ branchspec を使ってチェンジリストを統合すれば、マッピングをリバースすべきかどうかは自動的に判断されます。

ターゲット ブランチには存在しないファイルに変更を統合する方法を教えてください。

これらのファイルを統合から外すために branchspec を更新しなければなりません。branchspec のオーナーにこれらのファイルをアンマップするよう依頼します。

通常これが起きると、 Perforce は以下のいずれかを実行します。 1. 統合を実行するには -d フラグ、または -dt フラグが必要である警告を出します。 1. 統合を実行し新規ファイルを分岐しようとする。

* -d を追加して強制的に統合し、チェックインする前にこれらのファイルをリバートすることも可能ですが、次の 2 つの理由からお勧めできません。
    1. エラーが発生しやすい。問題の発見時に branchspec を修正すれば、自分あるいは自分の後に誰かがこれらのファイルをうっかり追加することがなくなる。 
    1. Perforce は常にチェンジリストを統合する必要のあるファイルがまだあるとみなしているため、Perforce 統合データベースではそれほど活躍できない。

例えば、The Delta-To-Main branch (Gears PC) には Delta のみが必要とする「WarGame」フォルダがあり、 WarGame は Main から外されました。WarGame にファイルをインクルードする変更を統合しようとすると、 Perforce は「削除されたリビジョンの近くで」統合するには -d あるいは -dt オプションが必要であることを問題にするでしょう。この問題を解決するために WarGame を Delta-To-Main branchspec から外したので Perforce はこれらのファイルを統合しようとしなくなります。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback