This one goes out to the hobbyists and the solo devs, as I’d guess anyone employed in the industry is already using such basics.
But it does seem to be a particular problem among less experienced game developers, to avoid using version control (also known as source control) and risk losing progress if not their entire project.
Just in the last few weeks I’ve seen a video from a well-known indie dev admitting he got himself into a tangle through not using it, another one with a guy trying to make a game in a weekend only to have his files irretrievably corrupted on the last night. And endless Discord conversations in which someone has lost a significant amount of work and needs to be talked down from a ledge.
Plus it came up in the game jam advice thread, so it’s been on my mind and I thought it deserved its own post.
Why is this so prevalent in game dev? I have a few ideas, mostly around misunderstandings and perceived complexity. But it’s a bit heartbreaking to see people lose such huge chunks of work, not to mention demotivating for the person involved, so a PSA it is!
Why you should be using version control
- Backups - Each commit is an emergency backup of your code at a particular point in time. Hard drive fails? Well, luckily you’ve only lost the work done since you pushed the last commit. Note: I do recommend taking regular backups to store elsewhere and not relying on just this, but it’s a good start.
- Experimentation & rollback - You can feel free to try new things, break stuff, safe in the knowledge that if it all sets on fire you can just roll back to the last commit and pretend nothing happened.
- Teamwork - Sharing code and working together without overwriting stuff can be a bit of a nightmare. Version control helps to prevent issues and keep things running smoothly in a team situation.
- Branches - Maybe you’re working in a team and want to try adding a new feature without bothering anyone else. Or maybe you’re working solo but want to keep your wild experiments separate to your stable codebase. Either way, sorted.
- Paper trail - Ever discovered an obscure bug and wondered when it crept in and how (or maybe even whodunnit)? Now you can find out.
- Versioning - Clue’s in the name really, but once you start thinking about game releases and versions the ability to differentiate between stable release branch and work-in-progress branch is gonna come in clutch.
- And probably plenty other reasons that I can’t think of right now off the top of my head but hopefully you get the idea.
How to get started
There are two things you’ll need to start, the actual version control software and a place to host your project.
The most popular source control software is Git, and the most popular host is Github. Honestly you might as well learn these first because even if you decide to move to an alternative later, they’re massively popular in the industry and most teams and places of work will expect this knowledge anyway.
This post is long enough already without trying to add an actual tutorial in here but info on the exact process is easy enough to find. You’re smart, you’ll do fine.
You can interact with your project through the command line, but you can also install a more user-friendly GUI. The two most popular tend to be SourceTree and Github Desktop.
You can also find engine-specific help and .gitignore files etc online, so do make sure to search for those.
Before you start your next project. Before you work on that new feature for your work-in-progress game. Before you lose something you’d really rather not have lost. Please, please use version control.
End post.
I have seen people use Google Drive during a jam, as a team, I was flabbergasted! I was in charge of the git repo and quality control of our code in one of my biggest projects and I cannot begin to praise git enough. Git blame, feature branches and rollbacks have saved our team’s bacon a bunch of times. 10/10 advice, do make sure to start using it yesterday.
Ok I’ve seen the “but I use Google Drive for backups so it’s fine” argument a few times from solo devs, but in a team? When you’re in a hurry? Argh, nightmare fuel.
It amazes me that some people don’t use it. There’s only a few commands to learn, and it will save you so much time in the long run.
First I’m hearing of this kind of person existing and I am truly horrified to the core
Add stuff, commit stuff, push stuff. Like 99% of the time that’s all you need to know how to do, especially if you’re working alone.
But I think maybe part of the problem is people think it’s going to be a lot more complicated than that, and who wants to learn something big and complicated when you’re already trying to learn game dev, you know? At least that’s my theory.
And don’t forget that git isn’t GitHub! You can use git locally and make your own offsite backups, or I believe that there are other git-based online services as well. As a solo dev working on personal projects, I found it much easier simply to ignore the online issue completely, but git on its own is still super useful.
GitLab and Gitea off the top of my head. Here’s another list of alternatives https://github.com/ianchanning/awesome-github-alternatives
Yep I personally use Bitbucket, a holdover from the days when you couldn’t have private repos for free on GitHub, and I just never bothered moving. There’s tons of options, but I wanted to keep it simple for people starting off 🙂
And! If you have data science needs! All of the above goes for large data files and pipelines too! Please please PLEASE give DVC a try. DVC.org 😊 and the GitHub equivalent, dagshub.
It’s not the only option or there but damn, it works pretty seamlessly. And all just sitting right on top of git, too.
This is a new one on me, looks very cool though! Thanks for sharing 😄
I use version control on my hobby projects because I get a sense of closure when I finish a task, run the tests, then commit+merge back to master. Getting it into version control makes the accomplishment seem more significant.
And I’m terrified my house will be destroyed by a meteor and I’d have to start over from scratch.
Thats an irrational fear. You should be more afraid of sharks. If they get into your house, they WILL delete your code.
Holy shit. Sharks are the worst. One got into my house once and switched a bunch of my boolean &&s to bitfiddling &s. It took forever to track down.
I hate sharks.
Down with the shark menace!
Hah, yes I should maybe have added “soothes irrational fears” to the list somewhere too.
You’re right about the sense of closure though! Nothing like finally making a working commit to round off work on a feature, oof, feelsgodman.
What alternatives to git are popular-ish these days?
Before I was introduced to git, i had only tried Microsofts SVN server and it was a crap experience compared to git. Git just clicked with me, i fell instantly in love with it. It was fast and logical. And its file merging worked great. The only drawback was the program command args, it was hard to understand. So I relied a lot on GUI apps. And still do because I suck at memorizing more complex commands and args and at navigating the history graph with only colored ascii text.
Git is by far the most popular but I know large studios sometimes go with Perforce because it’s apparently better for dealing with extremely large projects. I say “apparently” because as a lowly hobbyist I’ve managed just fine with Git thus far.
@emptyother @TeaHands as far as I know nothing else is popular. I used to enjoy mercurial, and some companies stick to perforce.
@emptyother @TeaHands I’ve never used plastic but I know unity colab uses that now.
Though I prefer to just sit with git myself.
Oh no I feel called out! 🙈
Haha, I won’t say this was entirely uninspired by you, but I will say it’s come up a lot in conversations I’ve been a part of lately so you’re far from the only one 😅
It’s for my own good, I know! Totally learned how to add things to a commit but then remove things that shouldn’t be there and got added by accident. Look at me go!
🥳🥳🥳
What about large binary files?
Git lfs
Perforce is another source control tool that addresses this.
https://www.perforce.com/blog/vcs/version-control-for-binary-files
I didn’t want to mention that in the op because I didn’t want to confuse anyone coming into this for the first time, but you’re right it can be a problem.
I’d expect (and correct me if I’m wrong here) that by the time someone is running into this issue they’re generally going to be experienced enough to know about the basics of version control. But there are options, Git LFS is one, Perforce is another, and some folks self host their own instance of Gitlab to get around repo size limits of sites like Github.
git+lfs is a bandaid for the problem, and theoretically would solve the issue, but the tools are still rather limited. Sparse checkouts, shallow clones, git subtree and git submodule are all somewhat useful to mitigate large file issues. I’ve also been meaning to check out the meta meta-repository tool for my own personal stuff.
In the industry, perforce is often used, or a custom rolled solution that is a heterogeneous mix of git for source, svn (or something else) for binaries. If you’re made of money, alienbrain has always looked great to me, but I’ve never had the opportunity to use it.
If I had a dollar for every time I’ve seen this posted, I’d be mildly richer than I am now.