version control in unity, how do people do it?

I’m currently evaluation unity as the main tool on my 3D app development pipeline but I’m concerned as in how to make it work so I can have say 5 programmers working on a project on parallel, I read on the wiki that unity does not include version control support capabilities, I’m wondering how the people out there who are currently using unity for their profesional projects manage to work around this limitation, or how would the unity developers recomend us users to acomplish such task. Thanks.

I always add update assets into a unitypackage, and send it over to whoever needs the updated assets. Seems to work pretty well.

thanks for the reply bronxbomber that sounds like a viable solution for game assets but what about all other game logic and structure that aren’t scripts?

There isn’t a way that I know except writing it down, and telling them… Hopefully 2.0 will fix this issue :slight_smile:

I hear ya, I got my fingers crossed, I think unity is a terrific solution for developing games but with the complexity of today’s games the use of a version control system is a must and I’m sure the developers are aware of this.

hi,

subversion is a great solution to control your code/assets. it has all features of version controlling and it’s easy to use.
http://subversion.tigris.org/

two ide’s that seamless integrate suberversion are monodeveloper (free, http://www.monodevelop.com) and x-develop (US$ 499, http://www.omnicore.com/)

p.s.
i hope unity implements a subversion “plugin” somtime. so i dont need to switch between unity and x-develop to update my code/assets.

There is also Bazaar, a distributed version control system. http://bazaar-vcs.org/ I’ve been considering this because you don’t need a server it can integrate two trees locally. (ie you zip up a folder you’ve worked on and send it to someone who unzips it and runs bazaar on it to integrate it into their local tree) Looks pretty cool.

I’ve used tortoise CVS and Perforce, both of this solutions work very well for text (source code, XML, etc), but as far as binaries and other non text formats their functionality is limited to keeping a history of your files. What I’d love to see in Unity is a way for me to effectibly merge project structures and hierarchies that way I can trully work in parallel with the rest of my development team, say I work on gameplay logic, and another person can work on UI or the levels, the Version Control server would keep the latest stable build and people in the team can submit their changes much like any large software development project.

I am using Bazaar to store the whole project. I use this in .bzrignore

temp/*
Library/cache/*
Libray/Temp/*

I have not tried to rollbacks or anything other than checkout, commit and update yet. I do an add before commit to get all new files commited. Bazaar does not mind if you delete, move or rename files without telling it so it works fine using Unity IDE for everything except an update before starting and add, commit when finished. I use On My command to execute the update and add commit the finder.

I hear there’s this thing called Time Machine coming out soon from a small developer in Cupertino…

Kind of kidding … Time Machine may be great for the stuff version control is not so great for (big media files)…

I currently zip my entire project after any significant progress, and give the file a name with a date. It’s a testament to how freakin fast computers are these days that I can archive a 200MB project folder in about 30s.

Time machine will be good for some short term single user version control. I assume it will have at least one of if not both command line or apple script interface. So if it is fast enough I can save the project with time machine automaticly every time my unit tests all pass. Hopefully by using a config like my .bzrignore above I can make backups in under a second for small changes. Then I can do minimal rollbacks when I dig myself in to a hole during development.

mmm so are you basically adding the project files into an ignore list, right?
That sounds like it could resolve the issue of a version control system freaking out as you modify files that are not checked out, I’ll give that a try!

How about merging changes in the case 2 people have to work on the project at the same time? Is there a way to do this?

I ignore those files because they are temp and cache files that take a long time to syn when update or comiit and Unity will rebuild them automaticly when it starts. I always do updates and commits with unity closed. So it can rebuild temps and cache files that should be rebuilt because of underlying asset changes.

Bazaar does not freak out when change (delete/move/rename) file without telling it (like SVN does). But unity crates a large number of small cache files and I am using Bazaar in sftp mode so it takes a long time to move many small files. I think if you use a bazaar server this would not be a problem but I have not tried.

No one else working on my project has started checking code in and out but, I did make three directories and run simple checkin change, update different projects test. I tested what would happen if multiple users made changes checking in and out the code(including assets) sequentially. I did not test what would happen if a merge was needed as in the case if two people changed the same object and then tried to upload to the same branch. Bazaar handles these case but I am new to Bazaar so I have put off learning how to handle merges files.

cheers,
Grant

The problem with merging is that it usually requires human supervision to do it right so it’s pointless on files that are not text as you can’t understand what it says when you open them in the merge utility, all this could be easily fixed if unity would use XML for their project files. I know XML is uggly and not very nice on the eyes, but it’s posible to merge XML files.