Cogito, ergo sum
Subversion is a version control system designed to help groups of people working on the same files work together without stepping all over each others' toes, and keep track of all of the changes being made by everyone in a sane and productive way. Version management can contribute a number of benefits to all kinds of software development (and other) projects:
- All changes to files are recorded, including who changed them, when, comments about why the change was made, and precise information about exactly what was changed in each file.
- A canonical state of the project is always kept in one central location (the repository). Developers can update their copies from the central location at any time to make sure they're completely up to date with what's going on. Likewise, when one developer makes a change, he/she need only check that change in to the one central repository, and everybody else in the project will automatically get the change the next time they do an update.
- Anyone, at any time, can retrieve a version of the project (or individual files) as they existed at any point in time ("What did this look like last Friday?"). If problems are discovered at some late date, it is easy to backtrack in time to find out exactly when and where the problem was introduced.
- In some cases, multiple developers can even work on the same files at the same time. When they check their changes back into the repository, the Subversion software will automatically try to merge the changes from both developers into one up-to-date version in the repository (there are limitations to this. In particular, it only really works on text-based files). If Subversion can't figure out how to automatically merge changes, tools are also provided for developers to manually fix up conflicts.
Why use Subversion with Unreal?
There are a number of reasons why Subversion can be useful to people working on Unreal development:
- Subversion can make working together with other developers on the same project much easier. All code and other files are maintained in one place, and everybody's changes are seen by everybody else. Two people making incompatible changes to the same files will be noticed and flagged immediately by Subversion when they try to commit them, so people don't end up with a bunch of slightly different and incompatible versions of the same pieces floating around.
- Subversion can provide a central point where anyone interested in a project can go and see the state of the project, or get their own copy of it.
- Even if you only work on your own projects by yourself, Subversion can allow you to keep track of all of your changes over time, making it easy to go back and undo changes, or look at your change history to remember why you did something three months ago.
- If you do development on more than one machine, Subversion can provide a very easy way to keep everything in sync between your multiple development environments.
- Keeping a Subversion repository on a different machine than your work copy can provide a (limited) backup for your work. A fried hard drive doesn't mean that you've just lost months of work on that great new mod you were about to release to the public. (Note: while Subversion can be used by itself for a simple level of backup, you really should back up the Subversion repository periodically too, so you don't risk losing all of the valuable history information if the repository's disk goes bye-bye, or something equally catastrophic happens).
Why use Subversion instead of CVS?
CVS is a time-honored version management system, which many people have used quite effectively for many many years to manage software development. Subversion, on the other hand, is a newer upstart which aims to do much the same thing as CVS has done fairly successfully for a long time. Why not just use CVS?
Obviously, everybody has their favorite version management system, and so there is room for debate about which is better for what, but there are a couple of reasons that Subversion might be better for your Unreal project than CVS:
- Many files related to Unreal development are binary files, and Subversion does have somewhat better handling for binary files than CVS.
- Many files related to Unreal development are fairly large. Subversion is more efficient in transferring updates over the network than CVS, and thus can be faster when working with a remote server and large files.
- Subversion is often easier to set up and administrate than CVS, so if you're not a hard-core software developer who's already used to CVS, Subversion may be slightly easier to work with.
- Setting up Subversion
- A simple walkthrough of how to set up a Subversion repository for your Unreal project.
- Setting up a Subversion Server
- How to set up a Subversion server so that other developers can access your repository.