リビジョン コントロールの競合は、プロジェクトのローカル バージョンに加えられた変更をサブミットしようとした場合に、その変更がリビジョン管理内の最新の信頼できるソースと整合性を合わせることができないときに発生します。
これは多数の理由から発生しますが、最も発生しやすい原因は、チームメイトが変更を加えたチーム プロジェクトの一部に対し、変更を加えようとしたことによるものです。共同作業者の変更を最初に同期せずに変更をサブミットすると、競合が発生します。
競合を回避するために最も効果的なのは、自動チェックアウトと自動アンドゥを有効にしておく方法です。リビジョン コントロールのベスト プラクティス に従ってプロジェクトの競合を回避し、リビジョン コントロールの仕組みについての理解を深めてください。
自動チェックアウトと自動アンドゥによる競合回避の警告
Unreal Revision Control では、リビジョン コントロール を使ったプロジェクトの作成時に、デフォルトで自動チェックアウトと自動アンドゥを有効にすることで、ほとんどの競合を回避できます。
これらの機能は連携して、変更が加えられたアセットを自動的にチェックアウトし、チェックアウトに失敗した場合はその変更を自動的にアンドゥします。システムでは、競合を回避するために、この処理が行われたことを伝える警告をトリガーします。
こういった警告は、主に次の 2 つの状況でトリガーされます。
チームメイトによってチェックアウト済みのアセットに変更を加えようとする
チームメイトによって現在チェックアウト済みのアセットに変更を加えようとすると、チームメイトによって排他的にチェックアウトされているアセットが変更されることを防ぐために、その変更が自動的にアンドゥされます。
この時点で競合は回避されているため、このときに何らかの操作を行う必要はありませんが、当該のアセットにどうしても変更を加える必要がある場合は、チェックアウトしているチームメイトに連絡してアセットをチェックインしてもらい、最新の変更を同期してから目的の変更を加えることが最善のやり方です。
初めてこのような状況になった場合は、チェックアウトしているユーザーと、どの変更がアンドゥされたかを示す以下の警告モーダルが表示されます。この警告を常に表示したい場合は、[Don’t show me this again (今後は表示しない)] チェックボックスをオフにします。
それ以降は、この状況が発生した際にはトースト通知が表示されます。
最新バージョンに同期されていないアセットに変更を加えようとする
最新バージョンにまだ同期されていないアセットに変更を加えようとすると、後にチェックインできない変更が加えられることを回避するために、その変更が自動的にアンドゥされます。
この場合は、単にアセットを最新バージョンに同期することで、変更を加えられるようになります。
初めてこのような状況になった場合は、どの変更がアンドゥされたかを示す以下の警告モーダルが表示されます。この警告を常に表示したい場合は、[Don’t show me this again (今後は表示しない)] チェックボックスをオフにします。
それ以降は、この状況が発生した際にはトースト通知が表示されます。
競合エラー メッセージ
自動チェックアウトと自動アンドゥが無効な環境では、競合が最も発生しやすくなります。Unreal Revision Control の環境下で競合が起きやすいのは、次のような状況です。
- 最新バージョンへの同期が頻繁に行われない
- 最初にアセットをチェックアウトせずに変更を加える
- オフラインで作業する
以下のセクションでは、発生する可能性のある競合エラーと、その共通した原因について説明します。
最新バージョンではない競合
自分が最後に同期したスナップショットよりも新しいバージョンのスナップショットで別のユーザーによって変更/チェックインされたアセットに変更を加えた場合、最新バージョンに同期しようとしたとき、または変更をチェックインしようとしたときに競合が発生します。
この状況で競合が生じるのは、変更をアセットの非最新バージョンに変更を加えたためです。
この場合は、どのアセットが競合しているか、同期が必要な最新の変更をそれらのアセットに加えたのはどのユーザーかを示すエラー メッセージが表示されます。この競合に対する唯一の解決策は、最新の変更を同期して自分の変更を上書きする方法です。
最新バージョンに同期して上書きしたら、目的のアセットをチェックアウトして、変更を加えてチェックインします。
チェックアウト済みのアセットの競合
このタイプの競合は、別のユーザーによって現在チェックアウトされているアセットに変更を加えて、最新バージョンを同期しようとしたとき、または変更をチェックインしようとしたときに発生します。
この競合は、チームメイトによって排他的にチェックアウトされているため、自分にはそれを編集する権限がないアセットに対して変更を加えたことが原因で発生します。
この場合は、チェックアウトせずに変更を加えたアセットと、チームメートと協議するための指示を含むエラーが表示されます。
自分の変更を破棄する場合は、リビジョン コントロールのコンテキスト メニューを使って競合する個別のアセットへの変更を元に戻し、再び同期またはチェックインを試みます。
重複したアセットの競合
3 つ目の稀なタイプの競合として、たとえば 2 人のチームメイトが意図せずに同じ名前とファイル パスのアセットをそれぞれ作成し、これらを個別に保存してチェックインしようとしたときに生じる競合があります。最初にチェックインするチームメイトは操作に成功しますが、2 番目のチームメイトはエラー メッセージを受け取ります。
このような場合は 2 番目のオブジェクトの名前を変更するのが最善策であり、そうすることでこのオブジェクトが消えることはありません。別の解決策として、プロジェクトの階層内でアセットの場所を変更する方法もあります。ファイル パスが異なれば競合は生じません。
オフライン作業
UEFN プロジェクトの一部の作業はオフラインになっても継続できますが、推奨はされません。オフラインでの作業は競合のリスクを高めます。これは、アセットのチェックアウトはインターネット接続なしには行えず、複数のユーザーが同時に同じアセットで作業してしまう可能性が生じるためです。
オフラインで作業する場合は以下を推奨します。
- 自分が作業する予定のアセットを事前にチームメイトに伝え、可能であれば、接続を失う前に必要なアセットをチェックアウトする。
- インターネット接続をできるだけ早く再び確立して最新バージョンに同期し、加えたすべての変更をチェックインする。