Having worked with both, there are pros and cons which really depend on your team members.
SVNās simplicity can be a double edged sword. Itās great for artists and other non-technical team members because it reduces the opportunity for screwing things up. Itās issue come up if you want to use branches, as they can get very complicated to properly manage and merge. It works best if you stick to trunk-based development.
Git can be a headache for artists. Itās hard enough to get them to understand they need to commit/update files with SVN to get things synced, explaining them the differences between commit and pushing, fetch and pulling feels like trying to explain quaternions to a group of lawyers. And thatās using a GUI client which abstracts the stage area, I wouldnāt even dare try to begin explaining the concept of āstagingā (which is basically a 3rd layer where your changes can live).
Having the entire history locally can be an issue on large projects. LFS somewhat mitigates this, as itās āpruneā functionality keeps around only the data needed for the last couple commits, but pruning is something you need to do manually AFAIK. Still, in my experience with LFS you get a similar disk use as SVN, except thereās no partial checkouts in git. For truly massive projects, Perforce is the only one that doesāt keep any duplicated files around and allows partial checkouts.
Branching and merging is, of course, much more robust in git than in SVN. But it can still get confusing if youāre not familiar with what terms like āHEADā and āREMOTEā actually mean.
It also doesnāt help that I canāt seem to find a āperfectā GUI client: each one seems to have a weakness of some sort, be it performance, or being too simple, or being too complicated. The best one I found is Fork, which is actually a paid client ($50) with an āunlimitedā free trial. It makes git a lot more pleasant to work with for me because:
- It has an option to auto-stash local changes then re-apply them when pulling. This makes getting remote changes virtually as simple as in SVN and Perforce.
- It also has an option to rebase instead of merging when pulling. This creates a clean commit history without āmerge commitsā all over the place.
TortoiseGit can be nice for artists, but it has a fatal flaw IMO: it allows you to pull on top of local unstaged changes, and if any of the files in the pull is also modified locally it will create a merge commit which contains an unholy mix of all your local changes and the pulled in changes with no way of telling which is which after the fact.
Some people swear by git flow, but I much prefer trunk-based development due to it being friendlier to CI.