Perforce の自動マージツール

Perforce を使用した統合実施の作業を自動化するスクリプト

Windows
MacOS
Linux

Perforce Auto-Merge スクリプトは、P4 の統合 (つまりマージ) に伴う厄介かつエラーを招きやすい手順を自動化することにあります。「Perforce 統合に関する FAQ 」で説明したマージに関するいくつかのベストプラクティスを取り入れているため、Unreal Engine Perforce データベースのマージに推奨される手法です。

自動マージツールの使用

スクリプトは P4V または P4Win の「カスタムツール」として機能し、これを使って 2 つのブランチを 1 つのチェンジリストにマージできます。

以下の画像は P4V のスクリーンショットです。

P4AutoMergeCustomToolMenu.jpg

  • 任意のブランチに対して、Safe Merge または NULL Merge を選択できます (以下に記述)。

  • 任意のブランチを選択できる General (汎用) ツールがあります (ポップアップ ダイアログ付き)。

  • P4V または P4Win のカスタムツールエディタで使用しているフォーマットに一致させて独自のカスタムブランチを追加することができます。

スクリプトの実行時、別ウィンドウに以下のように診断が出力されます (P4V の場合。P4Win はステータスペインに表示します)

P4AutoMergeOutput.jpg

このウィンドウは現在の状況の概要を表示し、問題解決に使用することができます。

最後にチェックインの準備ができたら、弊社のマージポリシーで必要な情報が [description] 欄に既に入力されています。

P4AutoMergeChangeDescription.jpg

この欄には以下の情報が含まれています。

  • マージ方法を示す [AUTOMERGE] または [SAFEMERGE] 情報

  • オリジナルのチェンジリストの説明のコピー

  • 元のブランチ、変更 # 、サブミット (提出) したユーザー、日付情報を含んだフッター欄

Safe マージ

Safe Merge ツールはチェンジリストをマージして、auto-safe でファイルの解決を行います。あるブランチ、または別のブランチで変更されたファイルのどちらかを解決し、両方は解決しません。このタイプの解決法は確実に成功します。このプロセスが終了すると、必要なチェックイン情報が挿入された新しいチェンジリストが完成します。解決するファイル (マージを実行する必要があるファイル) が残っている場合、チェックインの前に手作業で処理する必要があります。

手動解決の手順については、「Perforce 統合に関する FAQ 」を参照してください。

NULL マージ

NULL Merge ツールはチェンジリストをマージし、Accept yours (双方の違いを承認) 型の解決を実行します。つまり、ファイルは反映されるだけで、変更されません。これは、変更リストは統合対象として検討されたが、双方の変更を組み込まないという決定を明確に示すものです。

NULL merge に関する詳細は、「Perforce 統合に関する FAQ 」を参照してください。

使用方法

  • Safe Merge (UT3 は例として使用しているにすぎません) UT3-PC でサブミットしたチェンジリストを 右クリック AutoMerge | UT3 PC -> PS3:SAFE Merge. マージが終了すると、ファイルに対して新しいチェンジリストが作成されます。 オートセーフ式で解決可能なファイルはすべて解決され、出力ウィンドウには残りのファイルがリスト表示されます。 * オートセーフ式で解決できなかったファイルを解決してチェックインします。

  • NULL Merge (UT3 は例として使用しているにすぎません): UT3-PC でサブミットしたチェンジリストを 右クリック MergeTo | UT3 PC -> PS3:NULL Merge. マージが終了すると、ファイルに対して新しいチェンジリストが作成されます。 全ファイルが NULL マージされます。 * NULL マージをチェックインします。

インストール

Python のインストール

このスクリプトは P4Python API を使用する Python のスクリプトなので、先にそれをインストールする必要があります。

  • Python の場合: ActiveState ActivePython の配布が推奨されています。 スクリプトは現在 Python のバージョン 2.5.2 でテストされています。

  • P4Python の場合: 最新の P4Python は、 Perforce ウェブサイトの 関連するソフトウェア ページからダウンロードできます。 Perforceウェブサイトから API ドキュメント もダウンロードできます。 * スクリプトは現在 P4Python のバージョン 2008.2 でテストされています。

カスタムツールのインストール

Python および P4Python をインストールしたら、以下を実行します。

  • P4AutoMerge.py.txt python スクリプトをダウンロードして、Python パス上に配置します。

  • P4V の Tools メニューで、[Manage custom tools.. (カスタムツールを管理)] を選択します。

  • [New (新規)] > [Tool... (ツール)] を選択します (ツールをグループ化するためにオプションでフォルダを作成できます)。

  • 以下の画像のようなオプションを設定します。 画像に示される文字列をユーザーのブランチ名に置き換えます。 P4V のカスタムツールで利用可能なオプションの詳細をご覧になるには、[select...] ボタンをクリックしてください。

P4AutoMergeSetup.jpg

  • そこから、サブミットしたチェンジリストを 右クリック してツールを選択することができます。

汎用ブランチツールのインストール

ブランチ名の入力を求めるプロンプトを表示するように P4V を設定することもできます。この設定方法はまったく同じですが、ブランチ名の代わりに特別なオプションを指定します。

  • P4AutoMerge.py -p $p -u $u -c $c -b $D -m SAFE %C

  • description (説明) に以下のテキストを入力します。「Enter the branchspec you want to merge from (逆の場合は最後に -r を付けます)」

P4AutoMergeSetupGeneral.jpg

複数のチェンジリストを一度にマージ

理論上では、このスクリプトは変更リストの一括マージをサポートしていますが、この方法は推奨されていません。カスタム ツール GUI への公開も難しい状況です。ただし、コマンドラインのオプションを使って各自で制御することは可能です。

使用方法:P4AutoMerge.py [options]

        説明:ブランチのチェンジリストの自動マージをサポートするスクリプト。

オプション:
  --version             プログラムのバージョン番号を表示して終了
  -h, --help            このヘルプメッセージを表示して終了
  -p PORT, --port=PORT  使用する P4 ポート。つまり、 p4-server:1666。デフォルトでは、
                        p4 環境で P4PORT を検索します。
  -u USER, --user=USER  使用する P4 ユーザー。デフォルトでは
                         p4 環境で P4USER を検索します。
  -c CLIENT, --client=CLIENT
                        使用する p4 クライアント。デフォルトでは
                         p4 環境で P4CLIENT を検索します。
  -r, --reverse         指定した場合、branchspec をリバースします。Default = False
  -b BRANCHSPEC, --branchspec=BRANCHSPEC
                        <Required> 使用する Branchspec
  -m MERGETYPE, --mergetype=MERGETYPE
                        有効なオプションを実行するためのマージの種類は、 SAFE と 
                        NULL です。Default = SAFE

ログインに関しては対応していないので、スクリプトが正常に機能するには、先にそのクライアント上で適切なユーザー認証を済ませておく必要があります。

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