oreilly.comSafari Books Online.Conferences.


Subversion UI Shootout
Pages: 1, 2, 3

CLI Principle #2

CLIs are superior when they support time-saving features of the shell. Tab completion is an amazing time-saving feature of many modern shells. Some SVN commands (such as move) in Rapid can benefit from such features.


The delete function schedules a file or directory for removal from the repository. The actual removal will occur with the next commit. The history is still in the repository; the file or directory will just not be present and readily available in any subsequent repository versions.


Delete a file from the repository using the CLI like this:

[jjones@cerberus cli_co]$ svn rm test_cli.txt
D         test_cli.txt
Right-clicking a file in Rapid and selecting "delete" from the menu schedules the file for deletion from the server repository.
Right-clicking a file in Windows Explorer and selecting "delete" from the TortoiseSVN menu schedules the file for deletion from the server repository. Unlike some other operations in Tortoise (like add and commit), there is no prompting or verification with a checklist of which files to operate on.

All delete operations are simple and work similarly. All perform a recursive delete for any specified directories. They all schedule files and directories for removal pending the next commit. The CLI does have the advantage of allowing a scripted delete. See the add command for an example of scripting a SVN command.

Tortoise has another advantage in that it's possible to perform SVN operations from within a search results window. To remove all *.txt files from a directory structure using Tortoise, perform a search from Windows Explorer, wait for the files to appear in the list, select them, right-click, and select TortoiseSVN -> Delete. Tortoise has more advantages for a user not proficient with the find utility (and fewer advantages for a user more proficient with the find utility).


Checking out a repository copies a specific version (usually the latest version) of the files from the server repository to a local directory.


A CLI checkout of a very simple repository looks like this:

[jjones@cerberus svn]$ svn co http://<server>/<repository> cli_co
A  cli_co/folder1
A  cli_co/folder1/tttt.txt
Checked out revision 3.
Checking out a repository from RapidSVN involves selecting Repository -> Checkout from the RapidSVN client, filling out a couple of fields, and clicking OK.
Checking out a repository from TortoiseSVN involves right-clicking in a directory in Windows Explorer, clicking Checkout, filling out a couple of fields, and clicking OK.

The GUI clients may be more convenient to check out a repository from because the forms and fields offer a visual clue regarding what data to enter. Tortoise is especially helpful because it remembers previous values of the fields.

GUI Principle #5

GUIs are superior when fields and forms provide visual "clues" regarding input. The GUIs both provide fields to enter the repository location, the directory to put it in once it is checked out, and which revision to check out. This is a simple example and anyone who has checked out a project more than a couple of times with the CLI will have no problem remembering which parameters to put where. The principle, though, still stands. Sometimes having a form to fill out makes it easier to enter input.

CLI Principle #3

CLIs are superior when a large number of options are available in order to perform a single command. (This is a general principle and not really relevant specifically to checkout.) Sometimes in such a situation it is helpful to script the different options. If there are only a few options you ever use, just remember them. A GUI tool with tons of options can tend toward a cluttered GUI. Then again, a CLI tool with tons of options can tend toward a cluttered CLI, but scripting is definitely helpful in such a situation.


Overall, the CLI is a very functional tool. It can perform any SVN command. It needs no GUI display, which is a requirement for some folks. Its usefulness extends to include the full power of the shell being used. You can chain together find, grep, awk, and other commands with the SVN command line utility. However, two features of Tortoise that have grown on me are 1) file checklists and 2) diffs at commit time by double-clicking the file to be committed from the diff window.

RapidSVN has great potential. The idea and goal is that of a cross-platform GUI SVN client. Its usefulness at this point does not quite compare with Tortoise and, in some cases, not even with the CLI. Specifically, it lacks checklists for selecting which files to commit out of all that have changed, drag-and-drop copy and move operations, and diff at commit time with just a double-click. While there are some shortcomings with Rapid, there is absolutely no reason that it cannot have all the niceties that Tortoise has. I hope as time passes on, that it will.

TortoiseSVN is, overall, my favorite of the three. The biggest drawback is that it only works with Microsoft Windows. Tortoise mostly provides quick and easy access to the functions you need to perform (by integrating into Windows Explorer through the right-click menu). It also provides some courtesy functions to help facilitate your work (such as double-clicking on a file in the commit dialog to get a diff window). Anything that I have negative to say against Tortoise is petty (with the exception of platform limitations). For example, it would be nice to provide a recursive status function with diff functionality without having to begin a commit operation. Overall, it's a great tool.

Jeremy Jones is a software engineer who works for Predictix. His weapon of choice is Python.

Return to

Sponsored by: