The software development process is a long and arduous road. Changes might be introduced to the game mechanics, the admin part of the game, or practically anywhere, especially, if you develop a GaaS product.
These changes need to be tracked. Indeed, you don’t want to simply copy the entire folder of the game project and save it under a different name (like mycoolgame_v02). You will need version management. That’s what version control systems are for.
What is version control?
Version control is the practice of tracking and managing changes to the code base. Version control systems provide a running history of how the code changes. Using version control tools also helps to resolve conflicts when merging contributions from multiple sources.
What is source control?
Source control and version control are practically interchangeable, but to put a fine point to it, version control is a more general term. Source control systems typically manage mostly textual data — source control typically means source code or program code. On the other hand, version control refers not only to the source code but also to the other assets of the game app, like images, audio, and video resources.
When you think of a branch, you’d typically picture a fork-like structure. Initially, there’s only one path, but then the paths diverge. That’s essentially what a branch is in source control lingo.
As you build your game app and expose it to testers, QA, and other stakeholders, they will give input that may force you to introduce changes to the game’s source. Most of the time, the changes will be small, but the changes will sometimes be massive. These large changes are inflection points to the development process. This is typically where you decide to branch.
The purpose of branching in version control is to achieve code isolation. You’re branching probably because the new branch represents the next version of the game, or it could be something smaller, like “let’s fix bug number 12345”. Whatever branching method you choose, you’ll need a version control for it.
How version control works. Image source: Gridly.
Why use version control in game projects?
#1 - Code backup
Source control, especially a remote repository, is a backup for your code. Indeed, you don’t want your hard drive to be a single point of failure. Do you? What happens to 10 months of coding work if the drive gets fried? What if your server dies? Do you have an automated backup?
#2 - Better team collaboration
Share the code with other contributors and still be in sync with each other. If you’re not using source control, how will you work with other developers? Do you really want to use Dropbox or Google Drive to share source codes? How will you track each other’s changes? Version control systems take care of synching and resolving conflicts or differences with codes from multiple contributors.
#3 - Roll back to the previous version
Version control systems are a retreat strategy. Have you ever made breaking changes to the code and realized what a colossal mistake it was? If you ever want to go back, it’s a cinch to do that in a version control system.
#4 - Experiments with zero risks
It makes experimentation easy. Do you want to try something radical, but you don’t want to clutter or pollute your codebase? Branch. If the idea doesn’t pan out, just leave the branch and go back to the trunk
#5 - Full audit trail
Provides an audit trail for the codebase. You can go back to previous versions of the code to find out when and where the bugs first crept in.
#6 - Better release management
Monitor the progress of the code. You can see how much work is being done, by who, where, and when.
#7 - Code comparison and analysis
You can compare versions of your code. When you learn how to use diffing techniques, you can compare versions of your code in a side-by-side fashion.
#8 - Manage different versions of the game
Maintain multiple versions of your product. Branching strategies should help you maintain different versions of your game/product. It is a common practice for the developers to have at least a production version (free from bugs, well-tested) and a work-in-progress development version.
#9 - Scaling the game projects and companies
Are you an indie developer? Or you are employed by one of the game giants - Ubisoft, Tencent or King? Whatever project you are involved into at the moment, you may come to the point when you’ll need to deal with more teammates, run more tests, and fix more bugs. Version control software is an indispensable part of your game growth.
#10 - Facilitate the continuous game updates
Thinking about the previous point, how often do you plan to release your game updates? Do you plan to do it once a year, monthly or weekly?
The more frequently you update your game, the more likely you’ll need to do the feature branching or release branching to minimize bugs and achieve flawless user experience. Not to mention if you select the games-as-a-service model.
What to consider when selecting version control systems
If you’re about to start a project and deciding which version control system to use, you might want to consider the following.
- Ability to support game projects. Some version control platforms are better suited for application development where most of the assets are textual (source codes), and some are better at handling binaryfiles (audio, video, image assets). Make sure your source control system can handle both.
- User experience. The source control platform must be supported by tools. If the platform is a CLI-only (command-line interface), it might be popular amongst developers, but non-dev people (artists, designers) might have difficulty using it. The tools have to be friendly to everybody.
- Ecosystem of tools and integrations. Does your CI/CD platform support it? Can Jenkins pull from this repo? Your version control system must play nice with the CI/CD apps in the age of continuous integration. Other questions to ask might be;
- Can you hook it up with Unreal/Unity?
- Do our IDEs support it?
- Is it easy to connect it with Trello? Jira?
- Hosted or on-premise. Are there companies offering a hosted solution for this version control system? Or do you have to provision a server yourself and find a data center where to park it? Hosting an in-premise source control system has advantages. Still, it also carries lots of baggage like IT personnel cost, capital cost, depreciation cost, etc. In contrast, a hosted solution lets you avoid all those in exchange for a fee.
- Single file versioning ability. Can you check out only a single file, or do you have to download everything? Some version control systems force developers to download all the updates from a central server before you can share or see any change. This might be sensible for application code, but it may not make sense for a game app where some of the assets are large binary files.
- Access control. Does the system let you control who has access to what? How granular is the control? Can you assign rights down to the file level? Can you assign read but not write privileges to users for particular files?
Some common version control systems are better at handling some of the things we stated above, and some are better at managing others. You may need to do a comparison matrix to select amongst the version control options.
If you ask an application developer for recommendation, I’m almost sure they’ll tell you Git, Subversion, or CVS. These are heavy favorites of app devs. They’re open-source software and great at handling textual data, but they may be ill-suited for a game development project because of the way they handle BLOBS or binary files (which a game app has lots of).
If you ask a game developer, you’ll get a different recommendation; game development projects have very different version control needs than application development projects. Should it be an independent software or a built-in feature in your database or CMS platform?
How many people are involved in game development? How many databases? How are localization and content delivery done?
Gridly features the built-in version control, which enables branching of the content datasets, tweak them in isolation and merge back to the master branch. Sign up for free and make your first branch.