Post tutorial RSS Version Control Systems and You!

Usually, when it comes to modding, many newcomers have a hard time keeping track of issues, source code, and assets, and what usually ends up happening is one person keeping track of everything, and more often than not this is the mod leader. And when a project lead isn't leading but is merely managing the assets, you've got a huge problem.

Posted by on - Basic Management

Usually, when it comes to modding, many newcomers have a hard time keeping track of issues, source code, and assets, and what usually ends up happening is one person keeping track of everything, and more often than not this is the mod leader. And when a project lead isn't leading but is merely managing the assets, you've got a huge problem. Hard drive failures, files being lost in translation, and worst of all, people dropping off the map, can contribute to a mod dying faster than a headcrab in a fire.

But don't give up! There's a solution. It's call a VCS or Version Control System. There are many different types to choose from, each with their pros and cons, which LUCKILY will be discussed in this article, not only saving you time researching for the best VCS for your project, but also laying them out nicely so you can discuss it with your team.

So, let's get started. In the world of VCS there are two types of VCS, centralized and distributed. Before we get into the actual different revision systems themsevles we're going to discuss the difference between these two models, as well as when you would want to use them. We're only going to mention free and open source software here, so I'm not going to talk about Perforce, or anything like it.

Centralized Version Control Systems

The centralized model is the VCS that is MOST familiar with mod developers today. If you aren't running at least an SVN or CVS repository for managing your code then you might as well just shoot yourself, because you're only a part of the problem. While CVS and SVN are effectively the same thing, and SVN is loads better than CVS I'm stil going to talk about it. The way a centralized VCS works is actually quite simple. There is a central repository for all objects. This is where the final build goes. It is the master version. End of discussion. People who have access to the repository update, make changes, and then commit their changes to the central server (hopefully in a way that does not cause a conflict).

Distributed Version Control Systems

In recent years, the distributed model of version control has become the most popular model of version control for open source projects. There is no reason why you can't adapt it to suit your project's needs. The distributed model is interesting. You pull, or "clone" the existing main repository locally, create a new branch, and then commit. Later on your work, once deemed stable is merged back into the main branch. Unlike the Centralized model however, where there is only one central main branch for use, there can be as many branches and as many clones as you want for your code. In fact some VCS encourage this behavior. The distributed model also usually has a much easier time merging code and assets, allowing a minimal amount of time updating your master branch, as opposed to the centralized model where it can sometimes take several hours to properly merge everything. Another great thing about the decentralized model, is if the central repository ever goes down, or is corrupted or is lost, you already have an easy to use backup. Or, if a programmer in an act of rage destroys your repository (not as in a wipe but removing it from the server, or access to the server or what have you), you still have your source code. I know of at least one mod that this has happened to. (It shall remain unnamed to protect each prospective parties).

So now that you undersand the difference between Distributed and Centralized Version Control Systems, we can actually get into who uses what, and when. Let's get started :D

Subversion:

Subversion is an oldie, but a goodie. It was created to fix problems that some people saw with CVS, which is the oldest continually used VCS to date. It has a client available on all platforms (Mac OS X, Windows, Linux, BSD, or what have you), some even integrating into the operating system's shell, and it isn't too hard to find a tutorial. In fact there is a tutorial here on ModDB for using subversion. Subversion or SVN as it is more well known, follows the centralized model, in the same way that CVS did. SVN's motto is CVS done right. The problem with CVS, and therefore SVN however is it takes forever to perform a merging of branches. This shouldn't be a problem if you are the only programmer on your team. However, you need to be careful as to where your hosting is due to the problems I mentioned above.

Pros and Cons:
+ Used nearly everywhere
+ Many guides, and therefore people willing to help, exist for SVN
- Slow, can take a very long time to connect and download/upload changes to and from your local version.
- Centralized Model. This can cause a problem in the event of a site shutting down, programmer leaving on bad terms, or half the world ending. Be careful if you choose this.

That's it for the centralized model. Really. If you choose this, don't look back because you're going to see how much fun everyone else is having.

Onto the Distributed Model!

DARCS:

DARCS is first on our list because it is the least used, and frankly, one of the reasons why some people choose subversion over anything else. DARCS works in an interesting way. There can be an unlimited number of different versions of a respository. When you go to add changes to the main repository, it creates a .patch file. If you don't know what this is, I highly suggest you investigate this. It may save your life one day. The problem with DARCS however is very few projects choose it. It is slow, and has a nasty bug where occasionally it will go into an infinite loop and make you cry.

Pros and Cons:
+ It doesn't use the Centralized Model
- Slow
- Causes an infinite loop sometimes
- Not noob friendly
- While all on platforms, it does NOT come with a gui, requiring all work to be done commandline, which is a turn off for newbs.

bzr or Bazaar:

It's very hard today to go about the internet without hearing about Ubuntu. The company that owns Ubunutu, Canonical, created their own VCS called Bazaar. Bazaar is interesting. It works almost exactly like git (which will be discussed later on). It has an easy to customize API, allowing plugins to be easily written for it, and it also comes with a bzr-svn plugin that allows you to use bzr to manage a subversion repository. It is very easy for beginners to learn, has some great tutorials, and on most platforms, it integrates into the Operating System much like SVN does. The only problem is that compared to other VCS it is a bit slow. Nothing to make you freak out, but on a large project like a Source Mod, or a standalone engine, the first update might cause some worry.

Pros and Cons:
+ Newb Friendly
+ Best for converting from SVN to bzr, and back again (If you're crazy).
+ Comes with a GUI for all major platforms
- A bit slow for large projects, but only on initial commits.
- Very hard to find a site with free hosting that doesn't require you open your source code, so you may have to rock a private server.

git:

Git is one of the most popular VCS right now. VLC, Nokia, the Linux Kernel, and MANY MANY other projects use git. It was originally created specifically to fit the needs for the development ofthe Linux kernel. It is based off of monotone, and bitkeeper. Bitkeeper is actually very nice, but costs money. Monotone works a lot like git, except it is VERY slow. Slower than subversion and DARCS. So I'm not even going to go into it. Anyways. Unlike every other VCS on this list so far, revisions are not done incrementally (i.e. revsision 23, commit, revision 24 etc.) Instead, git uses an SHA1 algorithm to create a unique commit. The only problem however, is git seems to have this problem of not having a pretty interface on windows. While there is a version called MSYSgit, which is one google search away for the curious, it doesn't have the same ease of use on that platform, which hilariously enough, is the most used one in modding today. Another problem is sometimes the changing of files creates garbage. This requires a pruning, to increase the speed. Out of all the VCS on here, however git is the fastest.

Pros and Cons:
+ FAST. Like Quake 1 speed run fast
+ Large number of tutorials
+ Merging is superb
- Can be confusing for newbs because of the different number of commands
- Does not convert svn to git as well as others
- VERY hard to write plugins for it, so it will be hard to find additional functionality for it.

hg or Mercurial

Out of every VCS on this list, Mercurial is the SINGLE ONE that I will recommend for everyone, everywhere, everytime. Mercurial was written in python with some C so as to make it fast. Mercurial combines every good feature on this list with a few extra. First off, it uses the same SHA1 to name algorithms. Second it works via SSH (a secure internetl protocol) or http. It comes with a svn to mercurial converter. It integrates into Eclipse, Visual Studio 2k5 and 2k8, it is cross platform, has gui's for all three, comes with a FREE book explaining everything you need to know about it, it's used by MANY famous projects, specifically everything made by Mozilla (The people who brought you firefox), many other open source software projects, and to top it all off it is the only other VCS supported by google code. So if google likes it, you should too :D. the mercurial program itself is called hg which for anyone who paid attention in chemsitry is the chemical symbiol for mercury, which is a roman god, which mercurial is named after.

Pros and Cons:
+ Written in Python, so it's easy to create a plugin or add functionality
+ FAST
+ Visual represntation of branches, and well done merging
+ Great for small and large projects
+ Easy to use for newbs
+ Cross platform
- Community is a very small, so if something goes wrong get ready to spend some time fixing it.
- Nearly impossible to find 3rd party hosting. However I recommend bitbucket.org.

I really hope some of you out there read this in earnest. For any project organization is one of the biggest things. Without proper leadership your project may die, or become the next John Romero's Daikatana. And no one wants that.

Comments
SAHChandler Author
SAHChandler

If this needs serious revisions please let me know. I spent the better part of a day, and I want this tutorial to do well. Even though it's more of an article than anything else.

Reply Good karma+2 votes
INtense! Staff
INtense!

brilliant piece, you can see the effort you have put in. we actually have an interesting announcement surrounding this to come on moddb in a few days time

Reply Good karma+1 vote
SAHChandler Author
SAHChandler

Awesome =D

Reply Good karma+2 votes
SIGILL
SIGILL

Nice tutorial/article, I think this could be very useful for a lot of people!

Reply Good karma Bad karma+2 votes
Rigelblast
Rigelblast

Very good tutorial. It explains different methods and ways to keep track on the project really well. The "Pros and Cons" sections are also useful and nice.

Reply Good karma Bad karma+1 vote
Crispy
Crispy

"For any project organization is one of the biggest things. Without proper leadership your project may die"

I would say this tutorial isn't about leadership, it's about project management. For example a mod might fail in spite of good project management just because it's steered in the wrong direction. I was going to do a page about file distribution options in my QA Lead tutorial, but you've done quite a good job here so I think I'll link this and maybe add some download links.

Also -for large projects with big teams- I would personally recommend TortoiseSVN client, along with Trac. Working on a Source Mod (with ~17,000 files) I didn't find it to be slow, albeit having nothing else to compare it to (plus we were using a sponsored dedicated server). Trac is a simple Project Management wiki-style program, so when using TortoiseSVN in conjunction, the Trac page will give you reports of all the changes. The two go together very well.

"[Trac] provides an interface to Subversion (or other version control systems), an integrated Wiki and convenient reporting facilities.

Trac allows wiki markup in issue descriptions and commit messages, creating links and seamless references between bugs, tasks, changesets, files and wiki pages. A timeline shows all current and past project events in order, making the acquisition of an overview of the project and tracking progress very easy. The roadmap shows the road ahead, listing the upcoming milestones."

Reply Good karma Bad karma+2 votes
Crispy
Crispy

...and I just saw Intense! is considering Trac and SVN for a Moddb members' service. Awesome!

Reply Good karma Bad karma+2 votes
Crispy
Crispy

An article on Gamasutra that ties into this. I'm posting it here more for interest than for practical advice.

"Collaborative Game Editing"
Gamasutra.com

Reply Good karma Bad karma+2 votes
Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.