- Home /
Script references broken after cloning from git repository
I am experiencing a problem whereby after cloning my git repository into a new location, all script references in my scenes and assets appear to be broken as if the scripts have been lost, however I can clearly see them in the Project window and can reattach them fine given enough time.
An example of my chosen directory structure:
/mygame/unity/mygame.client/Assets/
/mygame/unity/mygame.client/Library/
/mygame/src/mygame.sln
/mygame/src/mygame.common/mygame.common.csproj
/mygame/src/mygame.entities/mygame.entities.csproj
/mygame/src/mygame.physics/mygame.physics.csproj
/mygame/src/mygame.network/mygame.network.csproj
The unity directory contains a Unity specific .gitignore file, and the src directory contains a C# .net specific .gitignore file. The solution currently has a custom build step which copies the assemblies into the Assets/Libraries/ folder after building along with symbol files so that they are accessible by Unity.
I like having this clear separation of code from the Unity project as I found the generation of .sln and .csproj files by the editor to be problematic when wanting to separate the solution out into multiple assemblies. The idea would be that a developer clones the repository, loads and builds the C# solution for the first time, then loads and builds the Unity project for the first time.
What I have found is that by excluding my custom assemblies from /Assets/Libraries/ files in addition to the entire /Library/ folder (which was already in the gitignore) the script references are broken after a fresh build. I have reproduced this simply by deleting /Assets/Libraries/ and /Library/metadata/ folders and rebuilding everything. All files get rebuilt ok, but in the Editor I have to re-associate all of the script references. If I delete either one of those folders alone and rebuild everything still works OK.
I hope that is enough for someone to point out my mistakes here, and I would be really interested to know how any large teams out there go about structuring their projects.
For reference, my gitignore files came from Github