Unity プロジェクトを Git submodule で利用する方法
課題
Unityアプリのソース管理ってどうしてますか?
— 中村 薫 (@kaorun55) 2019年1月30日
サブモジュール的な共通機能をどうやって管理してるのかわからん。
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 だとデフォルトではシンボリックリンクが有効にならないようなので、諦めました。
上記プロジェクトでは、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 の設定をするという方法が紹介されています。
こちらも参考にしてみてください。