たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

Unity プロジェクトを Git submodule で利用する方法

課題

twitter.com

Unity プロジェクトを Git で管理している場合には、利用するモジュールは Git submodule を使って管理するというのが自然です。

しかし、Git submodule で利用したいリポジトリが通常の Unity プロジェクトの場合、 プロジェクトのルート直下は Assets, Packages, ProjectSettings などのフォルダになっているため、自分のプロジェクトの Assets 以下にそのまま入れられません。

例えば、MixedRealityToolkit-Unity だと以下のようなリポジトリ構成になっています。

自分の Unity プロジェクトの Assets フォルダに入れたいのは、MixedRealityToolkit-Unity の Assets 以下のフォルダです。

自分がとっている方法

Git submodule で別のフォルダにクローンし、Assets 内にシンボリックリンクをはるという方法を使っています。
シンボリックリンク自体は Git の管理下に入れず、バッチファイルで作成しています。

はじめはシンボリックリンク自体も Git で管理しようとしたのですが、Git for Windows だとデフォルトではシンボリックリンクが有効にならないようなので、諦めました。

github.com

上記プロジェクトでは、Git Submodule で External フォルダに MixedRealityToolkit-Unity を入れています。

クローンした後、以下のバッチファイルを実行し、External 内のフォルダからプロジェクトの Assets フォルダ内へのシンボリックリンクをはります。

@echo off

setlocal ENABLEDELAYEDEXPANSION

cd /d %~dp0

set FOLDER_1=MixedRealityToolkit
set FOLDER_2=MixedRealityToolkit.SDK
set FOLDER_3=MixedRealityToolkit.Services
set FOLDER_4=MixedRealityToolkit.Providers
set FOLDER_5=MixedRealityToolkit.Examples
set FOLDER_6=MixedRealityToolkit.Extensions
set FOLDER_7=MixedRealityToolkit.Tools

set i=1
:BEGIN
call set f=%%FOLDER_!i!%%
if defined f (
  rem echo Create symbolic link !f!
  mklink /D ..\Assets\!f! ..\External\MixedRealityToolkit-Unity\Assets\!f!
  mklink ..\Assets\!f!.meta ..\External\MixedRealityToolkit-Unity\Assets\!f!.meta
  set /A i+=1
  goto :BEGIN
)

pause

また、.gitignore にシンボリックリンクのファイルを追記しておきます。

/Assets/MixedRealityToolkit
/Assets/MixedRealityToolkit.meta
/Assets/MixedRealityToolkit.Generated
/Assets/MixedRealityToolkit.Generated.meta
/Assets/MixedRealityToolkit.Examples
/Assets/MixedRealityToolkit.Examples.meta
/Assets/MixedRealityToolkit.Extensions
/Assets/MixedRealityToolkit.Extensions.meta
/Assets/MixedRealityToolkit.Providers
/Assets/MixedRealityToolkit.Providers.meta
/Assets/MixedRealityToolkit.SDK
/Assets/MixedRealityToolkit.SDK.meta
/Assets/MixedRealityToolkit.Services
/Assets/MixedRealityToolkit.Services.meta
/Assets/MixedRealityToolkit.Tools
/Assets/MixedRealityToolkit.Tools.meta

バッチファイルをリポジトリに入れているので、クローン時の操作は以下のような手順になります。

> git clone git@github.com:HoloLabInc/LeapMotionInputForMRTK.git --recursive
> LeapMotionInputForMRTK\External\createSymlink.bat

前本さんの方法

前本さんのブログでは、指定したフォルダだけをクローンするように Git submodule の設定をするという方法が紹介されています。
こちらも参考にしてみてください。

satoshi-maemoto.hatenablog.com