A few points on choosing Git or Subversion
In this post I try to give a few criteria to help choosing between Subversion and Git:
- Complexity – Subversion is built for simplicity. This means it is simple to understand and the simple actions such as checkout, update, commit are easy. However, it also means the advanced actions like merge, cherry picking, splitting or merging commits and rebase (linearly adding work from one branch on top of another) are trickier.
- If you intend to have a very simple use of SCM, Subversion is better. If on the other hand you plan on a complex branch model or other advanced uses, Git is better.
- Toolchain Support – Subversion has better support for viewers, servers, IDE integration and works better on Windows.
- If developers are averse to working on the command line, Subversion is better.
- Multisite – amongst other things, Git is very good at cloning and updating repositories (in fact, each developer will have its own repository copy). When working in different areas, each can have a local “main” repository and synchronize between them
- If development is across several sites, Git is better.
- Offline work – In Git, each developer has a copy of the entire repository. This means the developer has all the features of a VCS even when working without a connection to the main repository.
- If developers work offline (e.g., travel to clients a lot), then Git is better
- Backup – In Subversion, to commit temporary work a developer needs to maintain a branch. Which means work is cumbersome and therefore developers avoid it. This means a developer can have a week’s worth of work on his computer with no backup. In Git, each developer can have a clone of the main repository on the server and push changes there. It is then easy to backup all these repositories (they are just folders)
Summary: Subversion will keep simple scenarios easy. Git on the other hand offers better support for complex usages, multisite and offline work at the cost of making works a (bit) more complex
What are your thoughts on factors that influence the choice of Git or Subversion?