Distributed Version Control Systems

  Bazaar    Mercurial Git 
Cheap local brancheshow? not possible?  yes
Shared repositories    what for? are they for multiple checkouts of the same repository only?  
Rename supportimplicit only tracks files, renames are copy+deleteexplicit 



Shared repositories

This seem to be a way to support cheap local branches or multiple checkouts of the same repository.

Bound branches

Supports bound branches, which support a very similar workflow to how one normally works with centralized systems. A branch can be bound to a remote branch (even one using another VCS like Subversion), support remote commits by still relatively fast for history queries.

Implicit rename tracking

Bazaar emphasizes the importance of implicit renames, it can track directory renames explicitly. It may be important for refactoring or tree restructuring.

Renaming is the killer app of distributed version control


No directory tracking

Mercurial tracks only files, it does not care about directories. Thus it cannot have empty directories in the repository, but this can be worked around by adding a hidden file to every such directory.


No individual file tracking

Git tracks changes to the whole repository, not individual files. File renames are implicitly found. Examples show that this system works very well.

Index or Staging area

This can be used to commit only part of the changes in the working tree, one can specify what parts he want to commit, not just individual files, but individual diff hunks. Almost every Git power-user say that it is a very useful feature, most could not live without it anymore.



Why git is better than X (X being Mercurial, Bazaar, Subversion or Perforce) 

Git is better than Mercurial