教學:為Unity的檔案在git上設定Smart Merge

概述

因為有些Unity的檔案無法被版控,例如scene,所以當很多人要編輯同一個scene的時候,merge總是會出問題。還好,利用Unity提供的一些功能,我們還是有方法可以將這些檔案納入版控。

版本

  • Unity 2017.2.0f3 (64-bit)

步驟

1. 將Asset Serialization設為Force Text

因為Unity預設會將諸如scene這些檔案以binary的方式儲存,所以沒辦法被版控。這裡我們必須先強迫Unity,將這類檔案存成純文字的YAML格式。在選單中找到Edit > Project Settings > Editor,在Asset Serialization Mode項目下選擇Force Text

2. 要求git以binary的方式處理檔案,避免被自動merge

既然我們已經將那些檔案以純文字儲存了,git預設將會自動merge這些檔案,但格式和語意上不一定會是對的。為了避免這種事發生,我們需要增加以下設定到.gitattributes中。如果project中還沒有這個檔案,可以自己新增一個在project根目錄。

*.unity binary
*.prefab binary
*.asset binary

3. 在git中設定UnityYAMLMerge

將以下設定複製到你的.git/config或者是全域的.gitconfig,讓Git去使用UnityYAMLMerge。

[merge]
tool = unityyamlmerge

[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

結果

現在你的git已經能夠將這個project中的*.unity*.prefab*.asset納入版控了。

參考資料

Leave a Comment