How to use version control for GameMaker with GitHub
Learn how to back up your files and to collaborate in a team using Git as a version control solution on your GameMaker project.
Git is a version control system that allows you to collaborate on an Unreal Engine project. In this guide you will learn
Version control, source control or revision control (it's all the same) is the right way to collaborate in Unreal Engine. You cannot put your files on a NAS or Dropbox and work together, because that would lead to file corruption and constant interruptions due to constant syncing.
To avoid desperation, a version control system allows you to
There are many version control systems available. The 4 most common are Git, Perforce, SVN, and Unity Version Control (Plastic SCM).
You have probably heard of GitHub. GitHub is a cloud service based on the Git version control system. It is part of a huge ecosystem around Git. GitHub is the cloud storage for your files and can do many other things like task management and automation.
When you use GitHub, you use Git version control. In addition to GitHub, you also need a desktop application that pushes and pulls files to and from GitHub.
We have a more detailed Git vs. Perforce comparison that includes cost. Here are some hard facts about both systems.
It's open source and used by 93% of all software development projects. There is a huge ecosystem of tools, cloud providers, and communities. There is no vendor lock-in. You can move your Git projects to another hosting provider if you are not happy with the first one.
Git does most of its work locally, so it's fast. It is fast at creating branches, local commits, and history lookups. Of course, this speed improvement does not count for file transfer, because that depends on your internet connection.
It's the industry standard for AAA game development. Perforce has been in the game business longer than Git, so it's dominant there.
It has great access controls due to it's centralized design. Where Git is designed as a decentralized system, meaning that once you have access to the Git repository (the place where you store your project files), you have access to everything. In Perforce, you can instead grant permissions at the folder level.
Both scale to TB-sized projects with thousands of participants. Perforce is known for this, and with recent developments in Git (with features like Git LFS, sparse checkout, and partial cloning), it works on large projects as well. We have tested it on terabyte-sized repositories, and projects like the Linux kernel that use Git have over 15,000 contributors.
Both have integration with the Unreal Engine, allowing you to submit changes and see the status of files directly from the editor.
There are three things you need to do.
While GitHub is the most popular platform, it has two main problems
Thanks to the Git ecosystem, we can choose an alternative. Azure DevOps doesn't charge for LFS storage, so we don't have to worry about storage management. However, based on the experience of our users, it can sometimes be tricky to set up.
If you need complete control over your files, a self-hosted Git server is the best solution. In the next section, we will show you how to set up Azure DevOps.
There are more or less 36 applications listed on the official Git website. In this article we will use Anchorpoint. We are the developers of Anchorpoint, but we will try to give you objective arguments for and against using it.
Anchorpoint is not for you if
If this sounds like you, you might want to take a look at SourceTree or GitHub Desktop.
On the other hand, Anchorpoint makes sense for you if you
Use One File Per Actor (OFPA). There is no reason not to use it, as it will split your map file into smaller actor files. This allows you to work with multiple people on the same map at the same time. If you are using World Partition, OFPA is enabled by default. If not, you have to enable it in the world settings.
If you want, you can also use the Unreal Git integration. Normally, it's enough to go to your Git client and commit and push all files to Azure DevOps from there. However, if you want to commit (not push) the files from Unreal, see the status of a file, and go back to older versions of a single asset, you can do that from the Git integration. To push your files to Azure DevOps, you have to do it from the Git client anyway.
Keep in mind that the Git integration will cause longer file save times because it will always copy to a Git cache.
Also, configure Git integration AFTER you have created the Git repository of your Unreal Engine project in Anchorpoint.
This tutorial will show you how to set up Azure DevOps as a cloud storage provider. When creating an account on Azure DevOps, we strongly recommend that you don't link an existing Microsoft-related account (e.g. from GitHub). We have seen this cause so many access errors. The best way is to create a completely new account that has never been associated with any Microsoft service.
The workflow is quite simple
If you're both ignoring the file lock and working on the same file, you're in a conflict state that you need to resolve. Anchorpoint will show you conflicting files in a conflict manager.
If you want to go back to an earlier version, you can click on a previous commit and revert it. Anchorpoint will create new modified files representing the reversed state. For example, if you made a commit that deleted a file, and you want to revert that commit, Anchorpoint will restore the file.
Anchorpoint does all this automatically, but if you don't want to use it, you'll need to install Git LFS, which stands for Git Large File storage and is the extension for handling binary data.
To use Git LFS, you need to mark the appropriate file types in the .gitattributes file. This is the configuration file for Git. The .gitignore file filters file types and folders that should not be uploaded to the git server. In most cases these are cache files created by the Unreal Engine. Here you can download a preconfigured .gitattributes and .gitignore file. Place the .gitattributes file in the root folder of your repository and the .gitignore file in the folder where your Unreal Engine data resides.
If you are a small team (less than 10), put all artists on a single branch. If conflicts arise, they can be resolved immediately. You don't want your artists to work on their own branch for a week, and then spend a whole day merging and resolving conflicts when they've forgotten what they were working on. If there is a conflict, resolve it immediately.
The developer is the technical master and will have a better understanding of branches. It's hard to explain the concept of branches to an artist. Just let them work on a branch and not change it.
Do this at least once a day. Don't push everything at the end of the week. You will create a lot of conflict. Regular pushes and pulls will keep everyone on the team in sync.
This is a hard habit for artists to get into, because it's natural to write a message like "made some changes”. Getting into the habit of writing good commit messages will make the whole game development process transparent and avoid confusion. It's the same as naming your files.