This page will help you decide if darcs or Subversion (or perhaps both) are appropriate for your project. Both have advantages and disadvantages! If you wish to try darcs out, you should also see MigratingFromSubversion.

Advantages of darcs over subversion

Every working copy of the repository is a fully functional repository

This is a key advantage of darcs over subversion. This is why Linus Torvalds was adamant that subversion would not be used for the Linux kernel, but using darcs for kernel development was explored.

Darcs behaves more gracefully when the server/central repository fails

If your "server" gets messed up for whatever reason, your users can still push/pull/e-mail patches amongst themselves. This also means that fixing your server can be as easy as running "darcs get" from one of the working copies, and then a "darcs push" to make sure everyone's patches are in the new central repository. It is also trivial to mirror your central repository in several places.

Darcs users can work offline and still record changes as they are made.

Subversion does not provide a way to record your work when you don't have access to your server.

Darcs is simpler to setup

You will only have to install and configure one binary on each of your machines. (you may also have to install the Haskell library which darcs depends on) You need at least three for Subversion, and in practice you may need more. i.e. svn client, svnserve or an apache module for the server, svnadmin to administer repositories, svnlook to browse the repository, etc...

Darcs keeps all of its files in one place.

darcs keeps all of its files in repository_root/_darcs, whereas svn puts files in every directory of your tree.

Less space requirements in some situations

Darcs is able to create a repository that doesn't include a physical copy of every file, which may be useful for keeping your repository on a usb key, for example. (see darcs get --no-pristine-tree)

More powerful merging

Darcs is based on a theory of patch algebra, which allows merging to be more flexible in a lot of cases. i.e. re-naming variables

Branching in darcs is simpler

A new branch is just another local copy of the repository. You can selectively move patches between branches, and to/from the server.

Darcs is more interactive, creating more efficient workflows

Darcs is easy to learn and pleasant to use because it is interactive. As you record, push or pull patches, you are given the opportunity to review details, be selective, and create a workflow that suits you. For specific examples, see Darcs Workflows compared to Subversion.

Darcs fixes more of CVS shortcomings

Darcs was designed to be great source control from the ground up. The benefits that Mark Stosberg describes from switching from CVS to darcs would all apply from switching from Subversion to darcs, indicating that Subversion shares a number of the weaknesses of CVS, although many of Mark Stosberg's points regarding easier collaboration and working on different branches could be easily solved by using the branching capabilities of CVS/Subversion.

Good for small to medium projects

Overall, the paradigm and design of darcs lends itself very well to smaller projects, i.e. a university lab group with about ten developers.

Advantages of subversion over darcs

Partial repository checkout

Subversion allows you to check out working copies of a portion of a tree. You can check out only what you need and never see changes other users are making to other parts of the repository.

Easier social transition from CVS

Subversion mostly fills in only the obvious deficiencies of CVS, like the inability to rename or move files without breaking history. Because it's so similar to CVS, including its deficiencies, it's able to a offer command set that is extremely similar, requiring minimal learning for users.

Subversion is better for very large projects

Subversion is intended to be an immediate replacement for CVS, which means, among other things, handling arbitrarily large projects. The hierarchical nature of subversion also makes large projects (i.e. tens of developers, tens of thousands of files) easier to create and manage.

Subversion has a working GUI and better integration to web tools

Projects like TortoiseSVN makes adoption among less technically inclined or GUI dependent developers easier. Darcs isn't as well integrated with popular web-based repository / development timeline / patch visualisation tools such as ViewVC or Trac (on the other hand, see TracOnDarcs for a mostly functional trac plugin).

Subversion supports CVS-like keywords

As detailed in CVSKeywords.

Subversion supports arbitrary file properties, permissions and symlinks

Darcs currently doesn't directly support arbitrary file properties, any special file permissions or symlinks, as cross-platform support for the latter two would involve considerable amount of work. Subversion uses "svn:executable" and "svn:special" file properties to support executables and symlinks. However, darcs does detect symlinks; if you attempt to add a symlink, Darcs will issue a warning and will not add the symlink.

Former advantages of subversion over darcs

Darcs had no easy equivalent of "svn cat -r <rev> <path>"

In Darcs 1, retrieving older versions requires making a copy of the entire with "darcs get", up to the requested revision.

Darcs 2 has a command to retrieve past revisions: "darcs show contents [-p ... | -t ...] <path>".

DarcsWiki: DifferencesFromSubversion (last edited 2008-07-07 11:13:31 by WeyfourWWWWolf)