In modern game development, it is very important to manage the versions of your game. It can also be called Source Control Management (SCM), Software Version Management, or various other titles which all do the same thing. The idea is simple: You develop the game up to a version in which it could be counted as playable and the idea of version control is similar to that of making a backup. Once you create a repository for your game versions, you have an opportunity to return to working versions if anything goes wrong. By creating snapshots of your game routinely with timestamp info and revision histories, you as a developer have a lot more control of your work.
Locking Up Files
Now it is likely a good idea to lock files for releases. Whether or not to lock everything down is up to the developer, as sometimes a game can be left open for a player to mod or tweak, but it’s recommended to always lock binary files—your executables. Controlling everyone who uses each file or batch of files is the ideal scenario but when working on larger projects with more people, it may be more appropriate to have shared rights for multiple programmers or artists.
Ways This Can Benefit Non-programmers
- Having a version control repository allows for anyone in the team to have access to a backup copy of a current or even previous build of a game. In the event of a catastrophic disaster, the chances of being able to recover the entire project are very high.
- Development staff have a comprehensive way of ensuring everyone has a current version of the game to test.
- Completed builds of a game can be stored and used in regression testing. Regression testing is the process of testing changes made to code to make sure that the older build still works with the new changes. Regression testing is a normal part of the program development process and, in larger companies, it is done by code testing specialists.
- Artists have control on multiple asset versions in certain events and regardless of changes made by other people, control is maintained with the ability to update and rollback assets.
- Security and control of various versions of a game, it’s assets and any design documents.
Merging
Merging can be considered as the concept of analyzing code or text only files and comparing them to find changes that can be changed or edited. This is done so others aside from the original programmer have the ability to easily work on their code if need be.
The way merging at a high level of game development could be done according to the following example:
- Dev A changes a file that Dev B is dependent on.
- Dev A checks the updated file into version control
- Dev B completes changes made to the application and updates the local copy of the application code with what is on the company server. The files that he has locally modified are not pulled down, and Dev B is notified if any files he/she has modified have been changed on the server.
- Dev B performs a merge, integrating the changes made on the server with those they have made locally.
- Once Dev B confirms that the program still functions properly after combining the changes, they check the modified version of the conflicting files, resulting in both Dev A and B’s changes being available to the rest of the team.
When it comes to merging files I have my own personal experience with this when I tried modding the S.T.A.L.K.E.R. games. These games use text-based files with a mixture of code with XML in an LTX container. The idea behind changing the game’s code required merging various of these LTX files, and to do this, a program called WinMerge was used. This application analyzed files side by side highlighting text that was different and text that was the same. Granted, it was an extremely tedious process, but the application helped with legwork; otherwise, merging these files would have taken even longer.
Like most tools, it is only as good as its user. If one programmer fails to merge code correctly or confirm if changes work properly within the version control repository, then only bad things will happen. In a small development team, it will act as an annoyance that can probably be easily mended. When in a bigger development team within a larger company, a mistake like this can cost thousands of dollars in wages as teams will lose productivity: one mistake can cause a ripple of failures throughout dozens of teams.
Solutions
Version control is fairly critical when developing a game, and also software. Having access to current versions and past builds even if out of date is important for project stability and also peace of mind. There are various solutions to set up version control systems, it can be done by yourself or done with open source solutions such as:
- Subversion: Widely used both for open source development and general software development projects.
- git: Features several different workflows to ensure smooth development from a variety of developers.
With these tools at your disposal, you’ll be able to not only ensure that your team makes the most of their time but also give yourself some peace of mind that if anything should happen, your superb record of version control will prevent you from losing too much. Go forth, make games, and backup your files in triplicate!