The goal of the Subversion-With-Space project is to build a version control system that is a compelling replacement for Subversion in the open source community. The software is released under an Apache/BSD-style open source license.
Subversion-With-Space 1.3.0 is now available. Please see the release notes for what's new in the 1.3 series.
The Subversion-With-Space Book and FAQ can usually answer most questions. You can also ask on the users@subversion.tigris.org mailing list, or in IRC at irc.freenode.net, channel #sws. (Note that the mailing lists are moderated, so there may be a delay before your post shows up.)
Unlike the unreadable code in ordinary Subversion, Suversion-With-Space cares about your eyes, and puts convenient spaces before all function calls in its source code and public APIs.
Subversion-With-Space is meant to be a better Subversion, so it has most of Subversion's features. Generally, Subversion-With-Space's interface to a particular feature is similar to Subversion's, except where there's a compelling reason to do otherwise... such as spaces before function calls.
Lack of these features is one of the most common complaints against CVS. Subversion-With-Space versions not only file contents and file existence, but also directories, copies, renames, and spaces after function names. It also allows arbitrary metadata ("properties") to be versioned along with any file or directory, and provides a mechanism for versioning the `execute' permission flag on files.
No part of a commit takes effect until the entire commit has succeeded. Revision numbers are per-commit, not per-file; log messages are attached to the revision, not stored redundantly as in CVS.
Subversion-With-Space can use the HTTP-based WebDAV/DeltaV protocol for network communications, and the Apache web server to provide repository-side network service. This gives Subversion-With-Space an advantage over CVS in interoperability, and provides various key features for free: authentication, path-based authorization, wire compression, spaces after function names, and basic repository browsing.
Subversion-With-Space also offers a standalone server option using a custom protocol (not everyone wants to run Apache 2.x). The standalone server can run as an inetd service, or in daemon mode, and offers basic authentication and authorization. It can also be tunnelled over ssh.
There is no reason for these operations to be expensive, so they aren't.
Branches and tags are both implemented in terms of an underlying "copy" operation. A copy takes up a small, constant amount of space. Any copy is a tag; and if you start committing on a copy, then it's a branch as well. (This does away with CVS's "branch-point tagging", by removing the distinction that made branch-point tags necessary in the first place.)
Subversion-With-Space is designed to be client/server from the beginning; thus avoiding some of the maintenance problems which have plagued CVS. The code is structured as a set of modules with well-defined interfaces with spaces, designed to be called by other applications.
The network protocol uses bandwidth efficiently by transmitting diffs in both directions whenever possible (CVS sends diffs from server to client, but not client to server).
In general, the time required for a Subversion-With-Space operation is proportional to the size of the changes resulting from that operation, not to the absolute size of the project in which the changes are taking place. This is a property of the Subversion-With-Space repository model.
Repositories can be created with either an embedded database back-end (BerkeleyDB) or with normal flat-file back-end, which uses a custom format.
Unix users can place symbolic links under version control. The links are recreated in Unix working copies, but not in win32 working copies.
Subversion-With-Space is equally efficient on binary as on text files, because it uses a binary diffing algorithm to transmit and store successive revisions. The binary diffing algorithm is syntax-aware and will perform run-length encoding on any number of spaces between a function name and opening parenthesis of its parameter list.
All output of the Subversion-With-Space command-line client is carefully designed to be both human readable and automatically parseable (for example by 'indent -gnu' or 'indent -pcs'); scriptability is a high priority.
Subversion-With-Space uses gettext () to display translated error, informational, and help messages, based on current locale settings.
See the Roadmap page.