Git Clients for Unity Projects
One of the nice things about using Git for version control on a Unity project is the large number of free and paid clients to choose from. In this article, I'll review a few of the options that I've tried while working on past projects.
It's hard to avoid using the Git command line client at certain times when working on a git repository. I find it easier to set up the initial repository from the command line and perform quick commits. Most tutorials also use the command line, and there is a near-endless supply of Stack Overflow questions and answers to get help when using it.
Even with all the help out there it can still be a bit overwhelming at first due to the myriad of Git commands available. Luckily it's possible to assign new aliases in Git, which makes it easy to come up with a relatively short list of custom commands to use for most tasks. I'll cover several of mine in the next article as well.
During the Git installation (for Windows), it offers the choice of two terminal emulators to choose from. In the past, I've used the Windows console option (cmd.exe), but it had an annoying issue that would cause me to have to restart it every so often. Lately, I've been using the other option, MinTTY, which works quite well but has the opposite issue. If certain applications like VS Code are launched from it and then MinTTY is closed, it will fail to restart until those applications are also closed. So far, it hasn't been a huge issue as I just leave MinTTY running, but it's something to be aware.
There are times when a nice GUI can come in handy especially when browsing the commit and branch history. In the following sections, I'll cover a few that I've tried and which work best for my workflow.
Despite its name, GitHub for Unity can be used with non-GitHub repositories. When it first came out I was quite excited by the prospect of a nice, in-editor Git client. It's free and open-source, but sadly I've had repeated issues getting it set up properly and with various bugs the few times that I've tried using it. It appears others have had quite a few issues as well and unfortunately work on it has slowed down lately.
UniGit is a similar project that seemed to have potential and some extra features including status icon display in the project window. Despite its potential, UniGit appears to be abandoned too with no new updates since early 2018.
Hopefully, someone will come along and revive one of these projects as I would love a nice in-editor client when working on Unity projects. Until that happens there are several general-purpose Git clients that are worth checking out.
SourceTree is free and made by Atlassian who also run Bitbucket, Jira, and now Trello. I've used it for different projects over several years and, while not without its quirks, I think it's still one of the best (free) clients available for Windows and Mac users. It's History view makes it easy to keep an eye on past commits, and I'm a fan of the No Staging option in the File Status view. Branching, merging, and stashing are all straight forward and work well.
Fork is a relatively new Git client for Mac and Windows that's currently free (but not open-source). It has a nice, clean interface that is similar to SourceTree's. It offers side-by-side diffs which I like a lot more than the standard diff style (although that is an option as well) and both a light and dark UI theme. There are some new image comparison features for LFS tracked files in the Mac version that look useful, but sadly updates to the Windows version seems to lag behind a bit.
One thing that did impress me with Fork was its performance. On my relatively small game project, Fork launches and opens my repository about 4 to 5 times faster than SourceTree (and uses about half as much RAM). Since I tend to close my Git client when I'm done using it, this is certainly a bonus. There are several other nice features in Fork, so check out its blog if you decided to give it a try.
GitAhead was another exciting find when I went looking for free and open source Git clients. It's available for Windows, Mac, and Linux which is pretty nice! Unfortunately ,it hasn't had much development recently, and it had a huge performance issue when staging files in a new Unity project using LFS. It would take GitAhead around 30 seconds to start and scrolling through the staged files list was unbearably slow. I think if this issue gets resolved, then it would definitely be a good choice for a Git client.
Finally there are a couple of paid Git clients that are worth looking at. Tower) and GitKraken are both popular choices. Tower is currently $69/year for their Basic plan, and it runs on Windows and Mac. GitKraken runs on Windows, Mac, and Linux and has a lot of great features, but it also has somewhat confusing pricing plans when it comes to using your own Git server or running "offline". Their Azure DevOps integration costs more as well.
Since my indie-development is a pretty slow process, I like to avoid as many subscription-based products as possible. On the other hand, having a well-supported product is also nice, so I might look into one of these options at some point in the future.
After testing several Git clients, my current choice is split between the Git command line for most tasks and Fork (with SourceTree as a solid backup) for tasks that require a bit nicer visualization such as reviewing large commits. It's a shame that the in-editor clients aren't getting more support, but if I can find some time, I may take a look at adding a couple of small features to UniGit and updating the build as I think it would be a great Git client for non-programmers.