Git is Linus' implementation of a distributed SCM tool (sort of) for use with managing the decentralized development of the linux kernel, Mercurial is a project started at much the same time as Linux steered away from the commercial bitkeeper.
Here's the differences according to my very limited experience:
- Both mercurial and git feel more snappy and responsive than bzr. The hg command returns immediately, most operations are O(1) or O(files).
- Bzr and Mercurial are x-platform and work on windows. Git only works on unix (slowly on cygwin apparently).
- Bzr and Mercurial implement a single branch in a working directory. For multiple branches, you need multiple copies of the working directory. Git provides multiple branches in the same working directory, and you change between them with 'git checkout <branchname>'.
- Bzr is python only, Mercurial is python with a bit of C, Git is C only. Git is currently more of a pain to build - no autoconf.
- Tailor 0.9.21 can convert both to and from bzr and git repositories, but only to mercurial.
- Bzr is maintained by a commercial company, which always makes me a little wary - does the development community disappear when the company goes bust?