*Hey all, I’ve read through almost every post on Version Control in the forums and I’d like to hear opinions circa-4.16 now that Git, Perforce, and SVN are supported in-engine.
EDIT: I’ve posted the final version on my studio’s blog: https://www.sondergames.com/single-post/2017/07/19/Game-Dev-Version-Control-Overview *
I should probably preface this post with information so it looks like I did my research.
Version Control Systems (VCS) - At the most fundamental level we have Git vs Perforce(P4) Helix vs Subversion (SVN). These are known as VCS and are frameworks that you can implement locally or in a cloud-based server using a GUI or command prompt. The big difference being that Git is open-source and distributed (DVCS). It clones the full repository locally onto each user’s machine and they just merge their changes from their local copy. Whereas SVN and Perforce are proprietary and Client-Server. Perforce offers several confusingly intertwined products now like HelixCore, Helix4Git, and HelixSwarm. Helix4Git is a hybrid solution.
Cloud-based platforms - Also known as Repository Hosting Services (yes, Wikipedia is my source) the main four for Git are Github (only Git), Bitbucket (Git and Mercurial), Visual Studio Team Services (VSTS) (only Git), and GitLab (only Git). For Perforce, it’s mostly geared towards you setting up your own server with their Helix Versioning Engine (P4D). If you don’t have physical server capabilities then Amazon Web Services (AWS) is their top recommendation for hosting a virtual server, but you’ll still need to do all the configuration and management. The only other easier option i’ve seen is using Assembla. As far as SVN it seems like Assembla is the most popular followed by RiouxSVN. These are the web services that will actually store your repository on their servers.
Graphical User Interfaces AKA Client Shell Interfaces - Part of the reason I made this post is due to Unreal’s new in-engine source control plug-in interfaces for SVN, Perforce (Epic Game’s choice), and the Git Beta thanks to @SRombauts . But you’re still unable to change deep engine level content like .ini files, so another way to track the repo is required. For Git repos Atlassian (makers of Bitbucket) SourceTree is extremely popular, and compatible with Github and Bitbucket. VSTS isn’t built into SourceTree, but with the link below you should be able to get it running with OAuth. GitLab promotes Tower. Perforce just has their proprietary software P4V from what i’ve seen, but it appears very polished. Finally the main interface for SVN is still TortiseSVN, though there are several other xxxxSVN products out there.
The majority of the cost in using version control is paying the hosting service. Git itself is free to use, and I believe SVN is as well. Perforce hides their prices though their website says they’re free for up to 20 users, but has developed a very ‘proprietary’ reputation and is the Apple/Autodesk of the version control world (high-polish, constant updates, but suck you in to using our product and don’t let you leave). I’ve also noticed that they have a very active PR department and almost every article that declares Git or SVN better has a comment from Perforce employees explaining there’s ‘new management’ and ‘more of a focus on the benefits of Git’.
- Github - Free up to 1GB of bandwidth/storage for unlimited collaborators on public projects. If you want private projects you have to pay at least $7/month. If you want to put in large files you’ll need to use GitLFS which is free for 1GB then $5/month per 50GB data pack on top of that.
- BitBucket - Free up to 1GB of bandwidth/storage for 5 collaborators on public or private projects. If you want more than 5 users it’s $2/user per month (min of $10). Git LFS is $10/month per 100GB data pack.
- VSTS - Free unlimited public or private projects, free unlimited repo size, and free for up to 5 collaborators.
- GitLab - Totally free for unlimited collaborators and public or private projects! Free 10GB of Git LFS room, but no way to purchase more space.
- Assembla + Perforce Cloud - No free platform. $45/user per month starting at 5 users, so $225/month minimum. Storage is unlimited.
- Amazon Webservices (AWS) Elastic Compute Cloud (EC2) + P4D - Fully based on your server hour usage but based on estimates here http://calculator.s3.amazonaws.com/index.html somewhere around $20/month for a 50GB server. A bit more complex to set up on windows platforms.
- RiouxSVN - According to their website free up to 50MB, then permanent storage room is $1/20MB on top of that making 50GB around $2500.
- SourceTree and P4V - Both appear to be free to use.
- Tower - Currently $60.
- Git and (DVCS in general) has traditionally been incompatible with repos requiring large binary files. With the latest Git LFS features it’s much better, but still the ‘repo pointers’ system isn’t perfect can get messy.
- Perforce is designed with large binary files in mind, and uses a ‘locking’ method on assets so that you don’t end up with conflicts needing a binary file to be merged (because you can’t).
- Perforce makes what its calls “lazy copies” when going between branches/streams to minimize storage space. You need to clean the lazy copies before removing old files.
- Everybody ***** on using SVN, and i’m not totally sure why, but it doesn’t seem like a good idea.
- Git is open-source and Perforce is proprietary, so as with everything there is more opportunity for community involvement and widespread adoption with Git.
- In Git and in SVN you edit your changes directly via editing files in local filesystem after receiving files from repo. In Perforce “the right” way to work with files is to mark them that you’re going to work with them (p4 edit).
- Perforce tracks integration on a per-file basis instead of per-commit. This makes Perforce the only option for large teams (~20+) since you don’t want that many people all trying to merge commits at the same time.
- Perforce server manipulation is typically faster than Git’s due to the way it handles files.
Best practices from @mittense
- Don’t mix your source control solutions. I tried this for a while, and it’s just a mess (especially for onboarding new folks). It makes sense at a high-level, not so much at a practical one.
- Once you make a choice, stick with it. Don’t jump to-and-fro unless you really have a strong reason to do so – I had to jump around a bit because I had an issue figuring out how to best host our repos (btw: Visual Studio Team Services is a git-based repo host with absolutely no repo size cap for free; my project currently is ~300gb and I’ve not paid anything for it).
- Git + Git LFS are a really solid alternative to perforce now, especially as LFS is getting file-locking (it has it, it’s just… unreliable). That said: Git and Git LFS eat the hell out of your local storage space. My .git folder for a project is about the same size as the actual project itself. Since I work on a laptop (a beefy one, but still a laptop) this has been a real pain, but it’s likely not for most. But it’s something to keep in mind.
- Perforce is great. It is also, however, not cheap once you get beyond the 5-seat free license.
- Don’t use Assembla.
- I also don’t recommend SVN, but I’ve never liked SVN.
> Which do you use and are you part of a team? How large and how many need to push commits?
> How long did your method take you to set up? Especially if you set up your own virtual server.
> When did you make the decision? What was the final reason you decided what you did? Would you change anything?
> How much does it cost you?
These are the best forum threads i’ve read through:
Best Wikipedia article for breakdowns:
VSTS old article about free Git LFS space:
After looking into all the options we’ve ended up going with VSTS + Git LFS + SourceTree. Setting up one of my artists takes around 5 minutes instruction outside of download time.