使用git submodule在Unity專案間共用程式碼
概述
2020-01-08 更新:建議使用custom packages。
git submodule是常見的共用程式碼的方式,讓一些通用的程式功能,能夠在不同專案間持續累積。但在Unity專案中,由於每個asset都會產生一個meta檔來追蹤,meta勢必得加入版控。而當C專案同時被A和B兩個專案同時引用進專案資料夾,同一個asset的meta就會有A、B和C三種版本,不管哪個專案上傳meta,都會讓其他專案壞掉。
為了解決這個問題,我們可以先將共用專案submodule在大專案的Assets
資料夾外,再透過symbolic link的方式,將共用專案的Scripts
資料夾連結進大專案的Assets/Plugins
中。
這個方法可以達到以下目的:
- 共用專案中的程式碼
- 共用專案可以保有自己完整的Unity專案結構,能獨立以專案形式開啟
版本
- Unity 2019.1.4f1
- git 2.22.0.windows.1
步驟
1. 使用git submodule加入共用專案到Assets/
外
在Assets/
資料夾外建立一個Submodules/
來專門存放我們的共用專案,因為在Assets/
外的檔案不會產生meta檔。接著我們到Submodules/
底下執行指令來加入共用專案:
git submodule add https://github.com/NagaChiang/lib-project lib-project
2. 在Assets/Plugins/
中建立symbolic link
在Assets/
底下創建一個Plugins/
資料夾,準備在裡面建立symbolic link,連結到剛剛放在Submodules/
中的共用專案的Scripts/
。根據環境不同,需要使用如下對應指令:
Windows cmd (需要系統管理員權限)
mklink /d /j lib-project ../../Submodules/lib-project/Assets/Scripts
bash
ln -s ../../Submodules/lib-project/Assets/Scripts lib-project
兩者之間的差別我就沒有特別去深究了。我自己最後是選擇了mklink
的結果,因為它產生出來的資料夾,在檔案總管中會多一個捷徑圖示,不像ln
產出來的,外表就跟一般的資料夾沒什麼分別,我擔心時間一長會讓自己混淆。
3. 設定.gitignore
忽略Plugins/
這時候git會以為Plugins/
底下真的有個專案,把它們都全部加進版控。為了避免這個狀況,我要手動將這個資料夾從版控中排除,在.gitignore
中加上:
# Submodules (symlinks)
Plugins/
Plugins.meta
Leave a Comment