I'm working with a team of four on a Unity 3D game project over the weekends. It's a lot of fun, but we've encountered problems with version control. Using Git and GitHub, we've faced many merge conflicts that are not easy to resolve; it's not as simple as just deleting a section or performing a forced push:
<<<<<<< HEAD:main.scene Painful ======= Delete me >>>>>>>
There are lots of unnecessary local meta files that get pushed to our repository. The solution I've found is not perfect, but it works:
First, open the Unity editor and go to:
Edit -> Project Settings -> Editor -> Select "**Visible Meta files**" in the version control mode
Second, add a
.gitignore file like this:
/[Ll]ibrary/ /[Tt]emp/ /[Oo]bj/ /[Bb]uild/ /[Bb]uilds/ /Assets/AssetStoreTools* # Autogenerated VS/MD solution and project files ExportedObj/ *.csproj *.unityproj *.sln *.suo *.tmp *.user *.userprefs *.pidb *.booproj *.svd # Unity3D generated meta files *.pidb.meta # Unity3D Generated File On Crash Reports sysinfo.txt # Builds *.apk *.unitypackage .DS_Store
Then, commit the actual changes and run the following commands:
git rm -r --cached . git add . git commit -m "Fixed untracked files"
Third, Unity has a tool called UnityYAMLMerge for merging scene and prefab files. Enable this by creating a
.gitconfig file with the following:
[merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = /Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
The next time a teammate clones the project, they may initially see an empty scene. However, there's no need to panic. Simply open the saved
main.scene (assuming you have saved the scene and committed it), and everything else should work as expected. I wish Unity had built-in source control like other IDE environments. Happy coding!