Skip to main content
サブモジュールは、あるDiversionリポジトリを別のリポジトリ内のフォルダーパスにマウントし、 特定のコミットにピン留めする機能です。エンジン、ライブラリ、アートパックなどをプロジェクト間で共有する用途に使用します。各プロジェクトは使用するバージョンを個別に決定でき、アップグレードは明示的でレビュー可能な変更となります。

主要な用語

  • マウントパス — 親リポジトリ内で他のリポジトリが現れるフォルダー。例: libs/engine
  • ピン — 親リポジトリが指し示すマウント先リポジトリのコミット。ピンは親の履歴の一部であるため、親を同期する全員が同じバージョンを取得します。
  • 子ワークスペース — マウントパス内にDiversionが作成する、マウントされたリポジトリの作業コピー。実際のワークスペースであり、ブランチのチェックアウト、編集、コミットが可能です。

サブモジュールを追加する

親ワークスペース内の任意の場所から実行します。
<repo> はマウント先リポジトリの名前またはIDです。ファイルは libs/engine に配置され、ピンは親にコミットされるため、チームメンバーは親を同期するとサブモジュールを取得できます。 Diversionは、既にファイルが存在するフォルダー、シンボリックリンク、または既存のマウントと大文字小文字のみが異なるパス (Windows および macOS では同じフォルダーを開くパス) へのマウントを拒否します。

サブモジュールの状態を確認する

  • synced — ローカルのマウントがピン留めされたコミットにあります。
  • missing — ポインターは存在しますが、ローカルにファイルがまだ作成されていません (例: 親のクローン直後)。dv submodule update を実行してください。
  • pin_mismatch — ローカルのマウントがピンとは異なるコミットにあります。通常はマウント内でコミットした後に発生します。
LOCAL CHANGES は子ワークスペース内の未コミット変更の数をカウントします。子ワークスペースの同期が一時停止されている場合は paused と表示されます。一時停止されたワークスペースは変更を報告できないためです。 親の通常の dv status も、サブモジュールに対応が必要な場合に警告を表示します。

ファイルを取得または修復する

update はローカルのマウントをピンに一致させます。欠落しているマウントをクローンし、ずれたマウントをピン留めされたコミットに戻し、削除されたマウントフォルダーを再作成します。未コミットの作業があるマウントやブランチ上のマウントには決して触れません。作業は保護されます。

サブモジュール内で作業してピンを移動する

マウントは動作するクローンです。マウントされたリポジトリを変更し、親をその結果に向けるには次のようにします。
repin は既存のサブモジュールのピンを移動します。--ref を指定しない場合、子ワークスペースの現在のコミット (直前にビルドしてテストしたもの) にピン留めします。異なるコミットにピン留めするには次のようにします。
ピンの移動は決して作業を上書きしません。マウントに未コミットの変更がある場合、コミットするか変更を破棄するまで repin は拒否されます。

サブモジュールを削除する

ポインターとローカルファイルを削除します。update と同様に、マウントに未コミットの作業が残っている間は拒否されます。

知っておくとよいこと

  • マウント内で実行されたコマンドは、親ではなくマウントされたリポジトリに適用されます。libs/engine 内での dv status は子の変更を表示します。
  • マウント内での編集は親の変更として表示されることはなく、親リポジトリはクリーンなままです。
  • 子ワークスペースはワークスペース一覧で <folder> submodule @ <your machine> という名前になるため、通常のクローンと簡単に区別できます。
  • Webアプリでは、親のファイルツリーがマウントをツリーアイコン付きで表示し、ツールチップにマウントされたリポジトリとそのピン留めされたコミットが表示されます。
  • ピンは親の履歴の一部です。親でのブランチ、マージ、および過去への遡行は、他のあらゆる変更と同様にピンを伴います。