When it comes to version control, I am a Subversion fan through and through. But this old dog can be taught new tricks, and Git is the bright and shining star of the version control systems available now, and with some pretty good reason. Unfortunately, I'm lazy and used to Subversion, and currently use Git quite rarely, so I didn't want to invest the time to figure out the command line client. If and when I decide to start using Git more seriously, then I'll make that investment; until then I decided to hunt for a nice point-and-click Git client.
As I looked, I found that there are currently three big players in the Git GUI space on the Mac right now: SmartGit, Tower, and SourceTree. If you're on a budget and don't mind using a non-Mac-like java program, SmartGit is worth looking at. For use in a commercial environment, it will set you back $69. It's the most expensive of the three; however, if you use it for non-commercial use, it's free. Tower will set you back $59 and SourceTree is a little cheaper at $55.
I played with SmartGit briefly and I really didn't like it. It seemed clunky and I found the UI to be confusing and very unlike my other GUI VCS tool, Cornerstone (for Subversion), so I can honestly say I didn't give it much of a chance. I really didn't enjoy using it. Comparing Tower to SourceTree was more interesting because they are very close in price, and they are both very obviously native Mac applications with the good looks to prove it. The UI of Tower, however, struck me as being more like Cornerstone and a little easier to use, so after brief usage between the two, I opted for Tower. Tower has a 30-day trial, and SourceTree has a 21-day trial so you can compare them for yourself.
While aesthetics are important to most Mac users, the look of Tower isn't entirely what sold me on it. Tower is a really solid front-end to the command line git program. It offers all the features necessary to work with Git: branching, tagging, merging, and easily working with remote repositories. Tower largely makes this a drag and drop affair. You can drag a remote repository branch onto a local branch and merge the changes into it. You can also easily create a new branch or tag from any commit on an existing branch from the history browser.
Click image to enlarge.
The repository viewer is both useful and annoying. Hitting Command+D will take you to the repository dashboard which lists the various defined repositories. Here you can see how many local uncommitted changes you have, and how many changes from upstream that you have not pulled in. Unfortunately, Tower only lets you work with one repository at a time and switching between repositories requires a visit to the dashboard or using the Repositories menu item to select from recently opened repositories. This seems like an extra step, especially when coming from Cornerstone that has a sidebar specifically to list repositories, showing the same needed/uncommitted changes that Tower's dashboard does. The dashboard idea would work, if it allowed you to have more than one window open -- I could easily like the idea of one repository per window if it allowed you to have more than one window open at a time. One nice bit of integration with Tower is its built-in support for both Github and Beanstalk. Provide Tower your credentials for either service, and you can create and clone repositories on them easily.
Tower also makes it easy to stage (see image below), by selecting specific files, those which will go into any given commit. You can even break this down further by staging particular changed parts. For instance, if you have a file with two changes in it, but only want to commit one of the changes, you can do this in the browse view by looking at the Unstaged changes and mousing over to the left side of the view and selecting which chunks you want to commit. You can also adjust the granularity of the chunks using the Diff Tool, making the chunks bigger or smaller.
Click image to enlarge.
I do wish that Tower had built in support for Git's svn support, however. This is a glaring feature omission that I would like to see in an upcoming version to really make this a solid application. SourceTree has this ability, which gives it a leg up on Tower in the functionality department. Other Subversion users, or users who have to deal with a Subversion repository but want to take advantage of Git's many features, would sorely appreciate this feature.
All in all, Tower is a great Git client. It's still a new-comer to the Mac, but it makes using Git very easy, despite a few missing features. The developers are responsive, however, and the updates are frequent. The 30-day trial should be sufficient to determine whether Tower is the right Git client for you.
Vincent Danen works on the Red Hat Security Response Team and lives in Canada. He has been writing about and developing on Linux for over 10 years and is a veteran Mac user.