Alapvetően a Unity 3D játékmotor által készített projektfájlok minden különösebb gond nélkül felmennek a git verziókezelőbe. A gondok akkor jönnek, ha nem egyszemélyes a fejlesztőcsapat, hanem többen dolgoztok ugyanazon a projekten. A szöveges C# forráskódban történt változtatásokat simán össze lehet fésülni más változtatásaival - viszont a .unity scene-eket nem, mert ezek apalesetben bináris fájlok, merge-conflict keletkezik.
El kell végezni pár beállítást, hogy többen is tudjátok szerkeszteni ugyanazt a scene-t. Ezek pedig a következők:
1. Kapcsold be a metafájlokat
Edit > Project settings > Editor menüpontban, választ ki a "Visible Meta Files" módot. Ekkor a Unity minden Asset-hez .meta kiterjesztésű metafájlt generál ami információkat tartalmaz arról, hogy az adott fájl mihez tartozik egyedileg generált ID-k összerendelése van bennük. Ez a Unity-nek fontos infó, a változásokat ez alapján gyorsabban detektálja.
2. Állítsd az Asset sorosítást szöveges üzemmódra
Szintén az Edit > Project settings > Editor menüpontban az Asset Serialization legyen Force Text. Így a .unity scene-ek nem bináris, hanem szöveges üzemmódban mentődnek el, amivel a git verziókezelő megbírkózik a fájlok összefésülésekor.
3. Izzítsd be a verziókezelő kliensedben a Unity Smart Merge tool-t.
Oké, hogy beállítottad a szöveges üzemmódot az előző pontban, de bizonyos merge tool-ok elronthatják a unity-hez tartozó projektfájlok belső szerkezetét. A Unity telepítésével a gépedre felkerült egy UnityYAMLMerge nevő szoftver. A kliensedben állítsd be, hogy a gyári helyett ezt használja a projektednél a git.
Windowson itt van ez a tool:
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
OSX-en itt van:
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
Beállítani így lehet: a .git vagy .gitconfig fájlodba beírod ezeket a sorokat:
[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<elérési út>' merge p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
4. .gitignore írása
A gitignore az a fájl, ami a projekted szülőmappájában van és leírja, hogy milyen fájlokat hagyjunk ki a távoli repository-ba történő szinkronizálás esetén. Például a teljes Temp/ mappa kihagyható a szinkronizálásból, mert azok csak ideiglenes fájlok. Vagy a teljes Library/ mappa is, mert az pedig egy lokális tároló a projektbe importált dolgokról - de a csapatmunka esetén úgyis a másik félnél is beimportálódik az az Asset ami az Assets mappában van, így ezeket is felesleges szinkronizálni.
Itt egy baró .gitignore fájl kifejezetten Unity-hez, amit helyezz el a projekted gyökerében.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.