When I propose a distributed scm over SVN people often tell me that they don’t need it, SVN does all they need, and they are working alone anyways. Instead of repeating over and over, here are some arguments/thoughts:

  • distributed also means distributed between your Desktop, Laptop and Webserver. Each checkout is treated equally, you can work offline.

  • usually distributed scm’s don’t need a dedicated server and can be served just fine over HTTP ssh and so on. Means less maintainance and administration for a single user.

  • No one but you needs write access, this makes a distributed scm far more secure than a single central server where all contributors need write access.

  • Most distributed scm’s secure their repositories with cryptographic hashes, quite some even support gpg-signing tags/changesets. With that they aren’t even attractive for hackers to tamper them.

  • branching is cheap, you can try out new things in branches which you can later easily merge back into the mainline or just dispose.

  • your local checkout/branch is self containing, which means it can be used as new base for forking/branching the project.

  • simple user interface (except gnu-arch), just something foo init, foo add ..files.., foo commit and you have initialized and created your first checkin.

  • mirroring support: most distributed scm’s offer push/pull mirror commands and registering different locations for those as source/destination. For just to publish your repo or backing it up, or mirroring others repos locally for faster/disconnected access.

  • In practice distributed SCM systems implement usually much more advanced merge capabilities which allow almost any kind of colaboration with a minimum of conflicts