I prefer using Mercurial
or Bazaar when possible (I don't use Bazaar much any more). Github is a good argument for git, but hg-git may mitigate that somewhat. Mercurial (as of TortoiseHg 2.0) has my favorite standalone GUI, the TortoiseHg Workbench.
Git can track content across files. If you ever want to do a 'blame' across files for another VCS (to find the commit that originally created a particular snippet), you can use
hg-git, or some other conversion to get a git repository, then run
git blame -M -C on the file.
Converts between multiple DVCS repositories, as well from SVN dumps. Package available in EPEL.
Git, Mercurial, and Bazaar all have plugins that inter-operate with SVN.
bzrto view the log, it will show the original date/times instead of the date/time of the SVN commit (i.e. the time it was pushed to SVN).
hgsubversionseems to do a good job of importing trunk/tags/branches into a single Mercurial repository.
git-svn, SmartGit looks like it may provide a good interface and better integration: http://www.syntevo.com/smartgithg/svn-index
hg-git is bidirectional, but its primary use case is to work with git repositories with hg, so it's possible but harder to do the other way around. For example: How to work in Git and push changes to Mercurial using hg-git.
For a one-time conversion, you can use fast-import to convert to git from hg or bzr.
For Windows installation, TortoiseHg comes with the necessary extensions; see mercurial for details
The simplest solution would be the convert extension:
# The project-hg directory should not exist yet hg convert project-bzr project-hg
This requires that Bazaar is installed, presumably to the same instance of Python, so it won't work with the standard Windows install of Mercurial. I was able to do it through a virtualenv in Cygwin: pip install
There is also a fast-import extension for Mercurial.
There is a
bzr-hg plugin, but it's pull-only and seems to be mostly unmaintained.
bzr fast-export-from-hg followed by
bzr fast-import is probably the way to go.
The mr(1) command can checkout, update, or perform other actions on a set of repositories as if they were one combined respository. It supports any combination of subversion, git, cvs, mecurial, bzr and darcs repositories, and support for other revision control systems can easily be added. (There are extensions adding support for unison and git-svn.)
/etc directory, use etckeeper, which is available in the repositories of most Linux distros (in EPEL for RHEL/CentOS).
Interesting and useful links (possibly dated):
Sometimes an editor will automatically make whitespace changes. Sometimes you have real changes, which should ideally not be mixed in with major whitespace changes.
In general, make a diff using one of the whitespace options, revert the file(s), and apply the diffs.
In SVN, "svn diff" has a "-x" option, so you can run e.g.
svn diff -x -w.