Versioning Systems for Game Development
As some of you may already know, I am developing a new game at the moment. I chose Unity Engine for this game. I know quite well that Unity is on par with FPSmaker for people who want to make games and there are shitload of games made with Unity (rarely very good ones). Nevertheless, since I am a computer engineer, when I choose a tool, it should be easy to use, dependable, strong and lets me to achieve what I want to do in the easiest way possible. In these terms, Unity, unlike most of the game engines out there, instead of having Object Oriented approach, has Pattern Oriented aproach and this lets me do most of the things I want easily.
Of course, there is another issue here: Team Work or Collaboration.
Only time ever when every individual does their own work and piece them together at the end, is college time, and best project in college time can be just a little component in after graduation. But even then, it was the hardest time to piece everything together seamlessly, if not impossible (it was for most of the groups so in our group it was always me who wrote the code from scratch).
A friend taught me how to use versioning, but I am unable to teach anyone else.
Anyway, while I was working with Unity, everyone in the team had their own project file, and once every month, they would send me these project files and I would merge them and send it back to everyone. Well, this everyone, is me and Zia, we are the only ones working directly on Unity. The last time we did this, the plugin Zia used gave such an error that I pulled my hair. Plugin was using C#’s Directory class to reach folder structure, where I wrote an object named Directory for listing. When I merged, plugin tried to reach my class instead of C#’s own, and it was consistently giving me errors, making me search for the problem in different places for a long time. When I found out that it was my own class named Directory, I changed it to PhoneDirectory but that came with more problems. When I finally made the game working again, I decided that I was done with this method, and I would switch to a version control system!
Then started to search for such a system. Naturally, first thing I can think about is clearly GitHub. Nevertheless I use Bitbucket because unlike GitHub, Bitbucket gives me the option to create private repositories without paying any fee. Sure, I love open source but I am not that dedicated to put my company work’s code on the net, even though I have no confidentiality agreement. I already have repositories that are open and easy to reach to source code, so I think I should have my own private space too. That being said, I tried to use Bitbucket for our game’s version control system. However, any git based system cannot properly handle binary files. That goes even worse when the project file size goes over 800 MB.
Then I saw that Unity has its own collobaration system: Asset Server! Well, if there is something like this, built-in, why wouldn’t we use it? Of course we would use, and I separated 5GB in my office server and installed asset server on that. However, there is something wrong with its Linux version. It won’t either run, start or install at all. I have made an extensive search on the topic, and this library, that line and I see it was nearly a rewrite of the code. I saw that it was not possible to cope with, so I installed this asset server thing’s Windows version on my own PC in the office. What the hell? Our campus didn’t let this port for incoming transmissions, nor the outgoing ones. Aside from standard ports like 21, 3306, 80 etc. any other port including Asset Server’s port is closed. I called the admin but they didn’t help me (too much porn?) so I said screw this and came to investigate other options.
While I was trying to cope with this, Unity released version 4.3 and announced its built-in Plastic SCM plugin. I saw that Plastic SCM has a quite qualified and extensive binary revisioning. Plus, it was free for smaller groups like mine. Therefore, I started to poke it. I installed the server on my Windows machine. I was about to have port problems again, but I saw that it was possible to change the port. Well, since I wasn’t using MySQL port on my machine, I set that and started to use it. It was going fine until…
One morning I woke up at home (interesting, isn’t it?), and I tried to connect server on my Unity installation at home. Nope? No connection. Zia said the same thing, he was unable to connect. Go to office, re-install server, re-set everything and… nope, I said screw it again. I wouldn’t spend any money on a central server, but it seemed like I had no other choice… Instead of buying a few packs of cigarettes, I would spend that money on a server and I found Asset Server Hosting. I found it, but its main page design was not very convincing. Payment is with PayPal, which is actually nice, but to a person, which is not actually nice. No person on the internet says that they used it? I was going between it would work or not, and realized that first month was free. So if there is a problem, I would end the agreement on my behalf and went with it. An e-mail came after I went with the process “Give us 15 minutes, we are getting ready your system”, and 15 hours passed with nothing! I logged into my PayPal account and canceled the monthly payment. If they don’t even tend to the job they would earn money, they would never tend to my problems after having the money I thought.
What should we do? was the question and I took a leap of faith and went back to the Unity’s Asset Server in hope with I would make it work and this time luck was on my side: I found this on the internetz. Amazon’s EC2 web services can be free. Well, I am using Amazon for many things. I reside in Turkey and for books, CDs and etc, I use Amazon almost every month. Maybe I should try my chance with this I said. I said it and I tried it, and after fifteen minutes I had an Asset Server up and running. After I set the ports, security details and etc. I went on rampage and even the installed Cache Server!
I said, Zia, listen to me, this and that and this and that. After 5 hours I had my whole project uploaded to server as my very first commit. Only thing left was to let Zia know how to use versioning systems, and after a few tries he learned the trick.
It looks like this, not mine though. In the beginning, I acted like an amateur and screwed my job, but well, here we go. Zia lives in the other side of the world (US, Tennessee), and I live this side of the world (Turkey, Ankara). There is 8 hours of time zone difference between us. I sleep, he works, I eat, he works, I drink, he works, I go to playboy parties, he works… Uhm, well, he says update and commit, I wake up and update and continue to work from where he left, and commit. Sometimes he screws up something and I can fix it. I never screw a job, never. Well… this seemed like I was not a game developer but a… ummm… yeah, whatever. We are working fine now.
I think this century’s invent is versioning systems. Post it type of things are a complete lie. Anything to add in commit comments are also a plus. And this is a commit list from where I work. Its a commercial project I work on alone, and I use bitbucket for versioning (and as a backup). Of course it is a private repository:
Long Live Version Control.