Battle of the Subversion Clients
Source Control Management (SCM) or version control is all about keeping a historical record of changes made to a body of data, such as a computer program. Think of it as a more powerful version of Time Machine: each time you make a change to your data (eg program), you commit the changes to a repository, which acts as a historical record of the evolution of the data in question. Multiple users can access the same repository, retrieving any revision of the data they choose, and committing any changes they make. This basic approach forms the basis of all modern software engineering, and it would be safe to say that the success of open-source projects rests largely on the ability to collaborate via SCM systems.
Things have been getting quite exciting in the world of SCM lately, after a relatively long period of staleness. To begin with, the old man of SCM — the Concurrent Versions System (CVS) — has been largely supplanted by Subversion. The name is quite appropriate, because Subversion effectively subverted CVS by stealing its commands, making it easy for programmers to adopt, and adding a few improvements.
For some, that wasn’t enough, and the last couple of years have seen a boom in SCM systems, predominantly so-called distributed version control systems. These include Git, Mercurial, and Bazaar to name but a few. We won’t get into the finer points of each system here. Suffice to say that they are all considerably more capable than Subversion or CVS.
The early-adopters may have moved on to greener pastures, but most of the developer world still lives in the land of Subversion, and the Mac developer community recently welcomed two new additions to the ranks of the native Subversion clients: Cornerstone and Versions. For years Mac programmers had to get by with a meager offering of CVS and SVN clients, but when it rains it pours, and now we have the choice of two very well written source control clients that are exclusive to the Mac.
“Which is better?”, I hear you ask. As with most things in life, it’s not a simple question of which is better, because each has advantages and disadvantages, and the best product for you will not necessarily be the best for someone else. Ultimately you need to try both products yourself, and make a choice, but to try to make the decision a bit easier, I’ll mention some of the things that I do and don’t like about each product.
Both apps are very well finished, perhaps in some part due to the competition that undoubtedly exists between the developers. The main windows of each are quite similar, though in Versions, working copies are grouped together under repositories in the source list, and in Cornerstone, repositories are listed in a separate table. Although the Versions approach makes immediately clear which working copy belongs to which repository — an advantage — I found it a bit confusing at first, because it wasn’t clear what would be displayed when I selected a repository in the source list. Due to the nesting of working copies under the repository, you might expect that selecting the repository would show all working copy files originating from that repository, but it actually shows files in the repository. In any case, you quickly get used to how it works.

Versions main window.
Probably the biggest advantage that Cornerstone has over Versions is its built-in file comparison tool. It is a pleasure to use, and makes comparisons between the working copy of a file and last revision in the repository, or between different revisions in the repository, only a click or two away. Nice. What isn’t obvious is whether you can compare the working copy with other revisions in the repository: It’s either not possible, or non-intuitive.

Cornerstone main window.
Versions shining light is probably its timeline, which lists log messages and changed files in a single table, grouped by day. This can make it easy to quickly browse your latest changes, but it does have some pretty serious limitations. In particular, you can’t filter the table of messages in any way. For example, you can’t call up all log messages containing a certain piece of text, or even request log entries containing a particular source file. This would seem to be a serious shortcoming, and severely limits the usefulness of the timeline. Hopefully the developers will fix this in the not too distant future.

Versions timeline.
If Versions suffers due to an inability to filter log entries, Cornerstone seems to have the opposite problem. In Cornerstone, you can’t view a full log of recent entries. Instead, you are presented with a guitar-tablature like timeline, with one row representing each of the files you have selected. You can then click revisions on the time line to see log entries and file contents, one at a time. Select two revisions of the same file, and you are presented with a file comparison showing differences. You can also filter the time line in any number of different ways, making for a very powerful timeline tool, even given its inability to display a full list of recent log messages.

Cornerstone timeline.
There is one more aspect where the two products differ significantly: price. You can pick up Versions for 39 Euros (about $49), but Cornerstone will set you back $69. It’s not chalk and cheese, but certainly worth taking into account.
On the whole, I would have to say Versions is targeted at a less sophisticated subversion user. It’s cheaper, and the UI is a bit simpler. It also offers free online subversion hosting, which would appeal to the subversion novice.
Cornerstone is quite a bit more powerful, and will appeal more to the experienced subversion user. It’s integrated file comparisons, and well thought out timeline tool are standouts. It costs a bit more, but if you use subversion daily, it may be worth the price.



Comments
I will check them out, but hard to justify the switch...
I have been using SmartSVN and ZigVersion for a while and I find that SmartSVN has significant advantages over both of these new clients. If there is any significant reason to switch from the free foundation version of SmartSVN to either of these I missed it in the review.
Having said that, I am always glad to find out about new apps that are relevant to my work, so thank you for taking the time to review these newcomers to the SVN client arena.
Still like command line.
Both of these look great, but for me I just don't see any big reason to switch from command-line. If there was a reason it would be the all of the visual reporting. It would be nice to see all of my working copies in one window. It would also be nice to see detailed information on each diff like github does.
User Experience
Personally, I would not use a Java tool. I would rather use the command line. I'm a snob that way, but if I have to use a tool daily, I want to enjoy it, and I've never found a Java tool that I enjoyed using.
Both of these apps are beautifully finished. Sure, you can get from A to B in a Toyota, but it will be more enjoyable in a BMW.
Drew
---------------------------
Drew McCormack
http://www.maccoremac.com
http://www.macanics.net
http://www.macresearch.org
Re: Still like command line
I am still a regular user of the command line too, but there are definite advantages to a dedicated graphical tool.
I was wondering exactly the same thing the other day: 'Is there really any advantage to this over the command line?' So I thought about it a bit, and realized that just about everything you do in a tool like this is faster/easier than on the command line.
For example, as soon as you open the app, you can click a project and see a list of all modifications. On the command you you cd to the directory, and then have to enter 'svn status'. Not an enormous difference, but all of those little things add up.
Want to see the diffs in a particular file? In cornerstone, you click it, and you're done. And the presentation is very simple to follow, and scrolling the file is very easy too. In subversion you enter something like 'svn diff SomeLongFileName.c', and pipe it to less or reach for the mouse to scroll. The presentation is not as easy to read, and navigating in the terminal is less than ideal. Again, not the end of the world, but it all adds up.
So I really do think there are advantages in these graphical tools over the command line. It isn't a night and day thing, but lots of small savings that make it preferable (IMHO).
Drew
---------------------------
Drew McCormack
http://www.maccoremac.com
http://www.macanics.net
http://www.macresearch.org
Emacs can do it pretty well
Carbon emacs is actually pretty good in working with SVN.
Displaying Deleted Files.
I have tried a variety of GUI clients with SVN and I think I like SmartSVN the best.
Having said that, I have yet to find one that will display any files I may have deleted in Subversion (I use IntelliJ IDEA associated with Subversion to manage my project files).
Sometimes, I may have refactored some code, which may have included deleting or renaming some files, and I might want to go back and compare new code with old code that is in a deleted file. With all of these GUI clients I haven't been able to find a way to do that. Can anybody recommend one that can do this?
Yes, I know there is a way to inspect deleted files from the command line, but I would prefer to use a GUI tool for convenience.
- Garry Archer
C vs. V
Not to subvert Drew's article, this comparison seems worth mentioning:
Cornerstone vs. Versions, Again
SynchroSVN
I've found that the application SynchroSVN is a very good SVN client, and it has a more complete feature set than either application reviewed above, including graphical branch merging. It is a Java application that has builds for all major platforms (linux included).
Being the IT person in a heterogeneous R&D lab, I've found that having the common client for all platforms is a strong feature when trying to convince those "never used source control in school" researcher types to possibly start using source control for their MatLab scripts. Teaching them how to use a source control client that is the same on all the platforms they touch makes my life so much easier.
Being an avid Mac user myself, I will say that while SynchroSNV is probably the most feature rich SVN client available that run on the Mac, unlike the clients reviewed above, it doesn't have that Mac feel to it, which can be annoying if everything else you us is "Mac".
Xcode and Command Line
I've tried Subversion while it was in beta, but found no real advantage over using SVN in Xcode and switching to the command line for a thorough comparison before committing. Xcode shows me the modified files and I can quickly do a FileMerge-like comparison; I don't actually need more features, but that's probably because my projects don't involve more than 3 devs. :)
Re: Xcode
If you only have a single repository and work alone, you may not need anything more than Xcode. I often work with multiple repositories and many projects, so it helps to organize them all in one tool.
Drew
---------------------------
Drew McCormack
http://www.maccoremac.com
http://www.macanics.net
http://www.macresearch.org