What is the best Source Control for game development ?
Tags: git, gamedev, sourcecontrol, productivity
Published: 2019-11-06 13:54:57

Choosing the best Source Control for a game development project is a hot topic in the indie community. Many teams struggle with making the right choice, and the advice available online is often misleading. The answer is surprisingly not obvious, and there is no one size fits all solution.

Earlier this year I [talked at the Nordic Game Conference](http://kahncode.com/2019/05/24/nordic-game-2019-is-over/) about Source Control, and how to structure your team's workflow, automation and continuous integration and deployment pipeline around it. You can [download the slides](http://kahncode.com/wp-content/uploads/2019/05/Always-Playable-NG19-Kahncode.pdf) here. As this is one of my areas of expertise, I wanted to go deeper into the subject and break down the options available in order for game development teams to make an educated choice about source control.

In this [series](http://kahncode.com/category/source-control-comparison/), we will study the major options available to you, their various pros and cons, and highlight the reasons why you should choose one over another depending on your team size, budget, and makeup.

Should I use Source Control?
----------------------------

Let's get one thing out of the way first, **Yes you should always use source control.** Yes, even if you're a solo developer working on a hobby project. Yes, even more so if you are a beginner.

Don't be afraid of source control, this is your most useful tool in the toolbox as a programmer, and the earlier you learn it, the more you will appreciate its many features and benefits.

There are many [articles](https://medium.com/better-programming/9-reasons-even-solo-developers-should-use-source-control-c4f5939e2a36) and [threads](https://stackoverflow.com/questions/3868436/why-should-i-use-version-control-if-im-working-alone-and-already-back-up-regula) outlining why you should use source control, but let me list a few points that I feel are relevant:

-   Source control (with a remote repository) acts as a backup for your code. If your hard drive or computer burns, you are safe. Even if you do not value your code much, having a backup can't hurt.
-   History and branching allow you to quickly explore several solutions and go back in time
-   Comments allow you to understand what you previously did and why. You may not believe me, but you will forget your own code sooner than you think. Here are some tips on [how to write good commit messages](https://dev.to/jacobherrington/how-to-write-useful-commit-messages-my-commit-message-template-20n9) for your future self and others.
-   You may have several computers on which you want to work on the project. Source control will make this easy.
-   One day your small project may grow. Perhaps more team members, perhaps you will sign a publishing deal and go big! You'll be very happy to have source control then.

Please note that Dropbox or any cloud drive equivalent is not a source control tool. Yes, it provides remote backup and some history, but it lacks all the tools and specific functionality that make source control software so useful.

Source control for game development
-----------------------------------

Thanks to [Git](https://git-scm.com/) and [GitHub](https://github.com/), source control has now become ubiquitous and collaboration has never been easier.

So, why is source control for game development so problematic? What makes game projects special?

-   Source control was mostly designed for code, which generally translates to text files. Game projects consist of code as well as game data, usually in the form of large binary files. Binary files generally cannot be diffed, nor merged. This hinders the possibility of using branches in the same fashion as you would with text files. It also requires exclusive locking mechanisms or conflict resolution.
-   Project size. Even the largest code-only projects remain manageable. Game projects can very quickly take more than a hundred of gigabytes, especially in the age of asset marketplaces. Some source control solutions struggle to handle large projects as they were not designed for this use case.
-   Non-technical team members. Code projects mostly involve programmers who can find their way around complex command-line tools such as Git. Game projects have many Artists and Designers who require a good user experience to properly use Source Control.

The available source control solutions for game development all have major drawbacks, whether it is price, complexity, user experience, or inability to handle large game projects. This makes the choice of source control very difficult.

This is why I created [GitCentral](http://kahncode.com/gitcentral/). GitCentral allows using Git as a source control backend but solves the user experience, workflow, and technical issues by providing full [integration in Unreal Engine](https://www.unrealengine.com/marketplace/en-US/slug/git-central).

Candidate choices and comparison axes
-------------------------------------

In this [series](http://kahncode.com/category/source-control-comparison/), we will compare the major source control options, provide the information, and draw conclusions in order for you to make the best choice for your team.

In order to compare them properly, we will evaluate each option using the following criteria:

-   Features and source control model
-   Ability to support game projects, handling large projects and binary files
-   Iteration time
-   User Experience out of the box
-   Ecosystem of tools and integrations, notably with continuous integration
-   Cloud hosting providers
-   Price

Here are the source control solutions that we will evaluate:

-   [Git](http://kahncode.com/2019/11/05/git-source-control-for-game-development/), the ubiquitous source control software popularized by the open-source community and GitHub.
-   [Subversion](https://subversion.apache.org/) (SVN), another open-source staple. SVN is losing popularity to Git but is still one of the major source control systems out there.
-   [Perforce](https://www.perforce.com/solutions/version-control), the AAA game industry standard choice.
-   [Plastic SCM](https://www.plasticscm.com/), a source control specifically designed for game development and large projects

There are other players to note in the source control field, such as [Mercurial](https://www.mercurial-scm.org/), [Team Foundation](https://en.wikipedia.org/wiki/Azure_DevOps_Server), [Alienbrain](https://www.alienbrain.com/) or [CVS](https://en.wikipedia.org/wiki/Concurrent_Versions_System). We will touch briefly on them whenever relevant, but their reported low rates of adoption, lack of specific functionality relevant for game projects, and them being arguably inferior products to the ones mentioned above, makes them secondary choices. We will also explore engine-specific solutions for commercial engines. Of course, if there is an interesting solution I do not know about or you want me to dig deeper into, please contact me.

Stay tuned for the first article where we will break down Git's pros and cons for game development projects.