I just attended a DVCS talk today (<a href="http://worldtour.fogcreek.com/" rel="nofollow">http://worldtour.fogcreek.com/</a>) and one simple difference between SVN and DVCSs is still fresh in my mind:<p>When you are pushing your changes back to trunk, how safe is that process?<p>In a normal SVN workflow, when you're ready to commit your changes to the central repository to which a team member has also committed changes, you'll end up running 'svn up' followed by 'svn commit.' If you have substantial code changes and you screw up the merge during 'svn up,' there's little record of your pre-update code. In the case that you accidentally select the trunk version of a changed file for the merge, your own recent code may be overwritten.<p>With Git/Hg/etc, you are constantly committing your changes to the VCS. And you commit before you merge your working copy with any changes pulled from the "central" repository. If you screw up the merge, the DVCS has a record of your local work-in-progress code changes.<p>You could argue with SVN that any sufficiently large feature transaction should be done in a branch. Then the merge back to trunk will be safe with the branch's commit history. Pragmatically speaking, however, many people - especially small teams - end up doing all of their SVN-based development simply using 'svn up' and 'svn commit.' I know I have.<p>The safety that comes with a detailed commit history, especially for day-to-day file merges, is one big advantage of DCVSs.