Rants And Raves

Daddy Needs A New Subversion GUI

March 08, 2006

I recently installed Subversion on my home computer, because a certain open source project with which I've been involved has switched from CVS to Subversion. Once I had Subversion installed, I decided it was finally time to do something that I'd been thinking about doing for a long time now: I created a repository locally on my machine so that I could gain the benefits of source control for my various hobby programs that I write in my spare time.

I then started importing all of my software projects into the repository, using the svn command line tool. Now, the command line is great and all... well, actually it isn't. At least from an ease of use perspective. The reason I own a Mac and prefer programs that are "Mac-like" isn't that I can't handle the command line, but rather that I don't want to have to.

At my workplace, where I have to use Windows, we use TortoiseSVN as our standard Subversion front end. TortoiseSVN adds a submenu, containing Subversion-related commands, to the Windows Explorer context menu. It also tags the icons of local files with overlays that indicate each file's status. So if you have a local working copy of a project, you can see at a glance which files have been modified, added, or deleted without a commit, and you can right-click on them to perform operations like diff, update, commit, etc. If you right-click in a folder that's not a working copy of a Subversion project, you still get a smaller submenu that allows you to import the folder or browse the repository.

The repository browser is particularly nice. It allows you to work directly with the files in the repository, such as moving, copying, and deleting files and folders, via context menus and drag-and-drop. In fact, all of TortoiseSVN's GUI windows are fairly well designed and handy. It even has graphical diff capability, allowing you to see your changes before you commit them, or to see what has changed between two different revisions of a file.

Unfortunately, TortoiseSVN is a Windows-only product. So I set about finding a Subversion GUI front end for Mac OS X. I found a handful of them, and tried them out, and unfortunately, none of them meet all of my needs. And I don't believe that my needs are very demanding. I need an easy to use, Mac-like program that will allow me to work with a local working copy of a project that's in a Subversion repository, and allow me to work directly within the repository itself. For working with local files, I need to:
  • Be able to import a new project into the repository, or checkout an existing project to a new location on disk.
  • Be able to determine which files have been changed locally.
  • Be able to determine what files have been added or deleted locally, and which of those files will and will not be added to/removed from the repository on the next commit.
  • Be able to update, commit, and revert easily.
  • Get a visual diff of files that have been changed and not yet committed.
For working with the repository, I need to:
  • Be able to move, copy, and delete files and folders within the repository.
  • See what has been changed by a particular commit.
  • Get a visual diff between two revisions of a particular file.
All of these tasks should be doable by pointing and clicking, dragging and dropping, and using contextual menus. None of the programs I've tried provide all of these features, and not all features that do exist are easy to work with. Here's a rundown of what programs are available, and my experiences with them.

JSVN

JSVN is a cross-platform SVN front end written in Java. It is currently at version 0.8. It is available in source form, or as a .jar file. After downloading the .jar file, I double-clicked it to launch it, and was greeted with the following error message:

[JSVN Launch Error]


The instructions on the web page say to launch the program by typing the following command on the command line:

java -jar jsvn-0.8.jar

Strangely, launching in this way worked, even though on a Mac double-clicking a .jar file is usually equivalent to executing this command. Anyway, once I got JSVN launched, I got a sparse window with which I couldn't do much of anything. The window has a menu bar, whose menus have a combined total of 5 menu items, including Exit and About. The Checkout command seemed promising, but seeing as how I already had everything checked out that I wanted to work with, I really just wanted to connect to an existing working folder, and was unsuccessful at achieving this. So, into the trash JSVN went.

Subcommander

It's probably only fair to mention that at one point I went frantically searching for a Subversion front end that could perform a particular task. You see, I had accidentally botched the import command at the command line, and checked in a bunch of files in the wrong place. So I was looking for a program that would allow me to browse the repository and easily move these files to a different folder, preferably by multiply selecting them and then dragging them to where I wanted them. Subcommander 0.15.0, which is a cross-platform (Windows/Mac/Linux) application written using the Qt library, did not fit the bill. While it was easy to figure out how to connect it to my repository and get a nice tree for browsing around in, the move function was nowhere to be found. Furthermore, the browsing functionality was a bit deficient. The repository was represented by a tree structure, where each folder had a disclosure triangle at the left side, similar to the Finder's list view. But if you double-clicked on a folder, the view would move to that folder, and there was absolutely no way I could find to go back up a level. So, Subcommander went bye-bye.

eSvn

eSvn is another cross-platform, Qt-based application, and is currently at version 0.6.8. By now you might be noticing a trend, in that none of the programs mentioned so far are at version 1.0 yet. Subversion is not that new, and you'd think there would be more finished front ends out there for it. The aforementioned TortoiseSVN is at version 1.3.2, for example. Why can't someone in the Mac space be that on the ball? Anyway, I must confess that I did not actually try this program. It was one of the first ones I downloaded, and knowing that I had a few more to choose from coming up, and assuming (wrongly) that there would be one or two real gems among them, I was more willing to dismiss applications for more trivial reasons. In this case, it was the simple fact that it was distributed as a .pkg installer. I have a general policy against .pkg installers if I'm downloading a program just to try out without knowing whether I'll want to keep it. This is because they could potentially put files anywhere on the system, and to uninstall the program you need to hunt down all the pieces and delete them. For applications, I much prefer the more common Mac way of distribution, which is simply the application file itself that you can just drag onto the hard drive wherever you want to, and just throw it in the trash to get rid of it. In the interest of fairness, I should give eSvn a shot when I'm more in the mood to deal with its installer.

SmartSVN

This brings us to SmartSVN. I had high hopes for this one. Not only is it made by the same company that makes SmartCVS, which is the CVS front end I ended up sticking with the last time I went through all of this, but it's even at version 1.1.8! Unfortunately, I wasn't able to get it to connect to my repository. Since my repository is located on the very machine that I'm using, and I don't intend for anyone but myself to use it, I have no reason to set up a server process for it. Thus, I connect to it using the file:// protocol. My attempts to connect SmartSVN to my repository using the file:// protocol were unsuccessful, and it subsequently occurred to me to check the SmartSVN FAQ. It turns out that the very first item in their five item FAQ says:
The file:// protocol is not supported, because it would be technically very difficult to implement and the svn:// protocol is a very simple to set up alternative.
Um, yeah. First of all, if the file:// protocol is so difficult to implement, how come all of the other programs I've tried support it? Plus, while I'm sure the svn:// protocol is relatively simple to set up for those who have sysadmin experience, it's something I'd rather not have to go through just to try out one particular application. It's kind of like the .pkg issue, but worse, since I'd then have a daemon running at all times that I don't even need, save for one application written by apparently lazy programmers. Listen, if I were willing to get my hands dirty with all of this UNIXy stuff, I wouldn't be looking for a GUI front end in the first place.

Besides, while the Subversion documentation is generally pretty good, they don't even get to the details about setting up and administering a repository until chapter 5. Everything before that assumes that you're just an end user connecting to an existing repository. Which I am, after having figured out and executed the one command necessary to create my repository. And that chapter isn't terribly easy for me to understand; it's obviously written towards people who have sysadmin experience, and know how to set up daemons and protocols and Apache servers.

So, for now, file:// is what I have available to me, so SmartSVN is out.

svnX

svnX 0.9.6.4 (getting close to a final version!) is a Mac OS X native application. It allows you to browse the repository, and manage local working copies. The interface is a little clunky. There's a window with a list of repositories, and a window with a list of working copies, and in both cases adding a new item to the list requires filling in a dialog box with path names; there's no drag-and-drop. But at least there's a standard file selector dialog for selecting the path of a working copy.

Once you have a repository in the list, you can double-click it to bring up the repository browser. It's not nearly as functional as the one in TortoiseSVN. Unfortunately, a painfully obvious theme throughout the program is the lack of context menus and drag-and-drop. Most operations involve selecting an item and then clicking a button or toolbar icon. Even the menus are sparse; there are no menu items corresponding to the toolbar items, which means that these commands lack keyboard shortcuts as well. So much for Mac-like.

However, svnX is the application I ended up using to move the files that I had accidentally imported to the wrong place. Too bad I couldn't just select them and then drag them to where I wanted. I instead selected them and clicked the "svn move" button in the toolbar... and was greeted by an error dialog telling me to "Please select exactly one item to move." Grrr. So I moved them one at a time. Admittedly, it was still better than having to use the command line and type all of those paths by hand.

As you can imagine, the window for managing a working copy is clunky as well, but functional. You can view the project folder either as a tree or a flat list, and when viewed as a flat list you can opt to hide all files that are unchanged. Adding, removing, committing, etc. involves selecting files and then clicking the appropriate command button. And multiple selection actually works in this case! Another neat thing is that svnX provides a visual diff between a changed local file and the repository version by handing off the job to Apple's FileMerge program, which comes with Apple's developer tools. Unfortunately, there seems to be no way to diff a local file against any version other than the latest, nor to diff two versions within the repository.

SCPlugin

Last, but not least, there's SCPlugin. This product is basically a sort of clone of TortoiseSVN, for Mac OS X. It puts a Subversion submenu in the Finder's contextual menu, and icon overlays on items in local working copies. Like eSvn, SCPlugin comes as a .pkg installer file. However, I was willing to install and try it anyway, for two reasons. First, by the time I got to SCPlugin, the pickings were slim, and I was getting desperate. Second, this software is not an application, but a set of plugins, which is exactly the type of thing you'd expect to be distributed as a .pkg file.

Since TortoiseSVN is so great, surely a clone of it must be nearly as good, right? Wrong. Where do I start? First of all, the latest news item on the web site, which is from December of 2004, states that the old code is being scrapped, and the next version of SCPlugin is being rewritten from scratch. The only binary distribution available for download is the last "old" version, which is version 269. (Wow, the higest version number of all the programs listed here!) Then there was installation. After installing the thing, it didn't work. No Subversion submenu in the Finder menu, no icon overlays in my Finder windows. So I had started hunting down and deleting all the pieces installed by the darn .pkg file, when I noticed that one of the pieces was a .prefPane file in the /Library/PreferencePanes directory. So I launched System Preferences, and sure enough there was an SCPlugin preference pane, in which I had to click a checkbox to enable it, and specify the path to the svn executable. Once I did this, the plugin worked.

Of course, there are problems. Strangely, the icon overlays don't always appear. When they're there, they're handy, but when they're absent it's annoying not to be able to see the state of the files. Another thing is that the contextual submenu doesn't contain as many items as in the screenshot on the SCPlugin web site. For example, there's no Import item for putting a new project folder into the repository. Finally, when invoking some menu commands, it presents a dialog requesting a user name and password, stating that the operation "may" require authentication. Like I said before, I'm using my repository locally, via the file:// protocol. I certainly haven't set up any user authentication, so I just leave the dialog blank and click OK. But SCPlugin doesn't remember that for the next time I invoke the command, so I have to dismiss the dialog every time.

[SCPlugin Authentication]

Other features that I want, nay, need, are missing. There's no visual diff. When you invoke the diff command, all you get is a window containing the textual output of the svn diff command. In a proportional font, even. And there's no repository browser, which means no way to manage the files in the repository, nor to examine the changes made to a file between certain revisions. In short, SCPlugin does not come close to meeting all of the needs I outlined near the beginning of this post.

The Verdict

So, does this mean that I've thrown away all of the Subversion GUI front ends I've tried, in favor of sticking with the command line? Certainly not. For now, I'm keeping SCPlugin and svnX. The former is useful for some of the basic management of local working copies, and the latter is useful when I need to work in the repository itself. At some point, I'll probably give eSvn a try. The .pkg installer really isn't a huge deal, and if there's a chance that this might be the gem of a program that I've been looking for, it's worth a try. Maybe if I'm feeling really adventurous, I'll set up an svn server daemon to enable the svn:// protocol and give SmartSVN a try. But that seems far less likely. But anyway, aside from those two untried options, it seems that the current state of affairs for GUI front ends to Subversion for Mac OS X is really poor.

11 Comments:

Anonymous Martin Hauner said...

Subcommander Tip:

Hi Karl,

to move back to the parent level simply double click the "." entry again. You can also single click on a tree symbol to open a folder without entering it.

I missed move/copy support in the repository myself for a few times so it is now scheduled for the next release.

April 20, 2006 12:30 PM  

Anonymous Richard Earney said...

I have come to the same conclusion with SVNx and SCPlugin.

<sigh>

May 09, 2006 7:25 AM  

Anonymous bobby said...

I'm looking for an scplugin installer for macintel, would you know of one?

August 25, 2006 11:41 PM  

Blogger Karl von Laudermann said...

No. The SCPlugin site doesn't seem to have been updated in almost 2 years, so they obviously haven't released a universal version. I'm unaware of anyone else with a similar SVN plugin for Mac.

August 26, 2006 8:23 AM  

Blogger gotheek said...

Hope you find something that works soon. I am in approximately the same predicament.

There is simply no content management system for the mac which is easy to install and configure. You need to go command-line for everything.

This is a huge gap in mac software which is useful not only for the coders (at whom existing solutions are aimed). I'm a writer, I'd like to keep my things safe and not run the risk of overwriting things. Writers aren't coders (though some are, this one isn't) and thus, I am stuck with manual version control with quite a bit of prayer when I update something.

It's so frustrating!

October 25, 2006 1:09 AM  

Anonymous Anonymous said...

You sould checkout Textmate they are doing some greate things with subversion as well as being the best GUI based editor on the market

October 28, 2006 6:11 AM  

Anonymous Anonymous said...

and what of RapidSVN:
http://rapidsvn.tigris.org/

October 29, 2006 12:05 PM  

Anonymous Chris said...

After trying most of the options mentioned I have come to really like SmartSVN. All the repositories I need to access are via https so I've not run into the file issue that you did but I think it would be worth your time to check this software out. You could download the free version and use it to access a public repository to get a feel for it.

October 31, 2006 3:01 AM  

Anonymous Anonymous said...

Looks like SmartSVN has listed the feature you were looking for:

"Directly in Repository Browser: Copy and move files and directories, viewnew, log and annotate files"

It's new, and only available in the paid-for version.

January 18, 2007 1:35 PM  

Anonymous Anonymous said...

Hi,
You should also check the Syncro SVN Client.
http://www.syncrosvnclient.com
The Client was initially developed as an embedded application in the oXygen XML Editor but right now it is available also as a separate application.

February 05, 2007 3:27 AM  

Anonymous jack said...

If you are running Leopard, then svnserve is easy - it's already installed. And so are svn itself and svnadmin. All you need to do to run svnserver is:

$ svnserve -d

and you're there.

April 15, 2008 9:39 AM  

Post a Comment

<< Home