Choosing between Distributed VCS (git) and Central VCS (Subversion) is far from being easy. Which one should you use? And why Central VCS are not satisfying?
Several things are blamed on Subversion:
- Major reason is that branching is easy but merging is a pain (but one doesn’t go without the other). And it’s likely that any consequent project you’ll work on will need easy gymnastic with splits, dev, test branches. Subversion has no History-aware merge capability, forcing its users to manually track exactly which revisions have been merged between branches making it error-prone.
- No way to push changes to another user (without submitting to the Central Server).
- Subversion fails to merge changes when files or directories are renamed.
- The trunk/tags/branches convention can be considered misleading.
- Offline commits are not possible.
- .svn files pollute your local directories.
- svn:external can be harmful to handle.
Sebastien Auvray introduces the concept of DVCS in one of his latest articles: