What are the differences between the following three free Version Management Tools?
Which one is the best for a small 2-5 people project? What criteria would you take into account?
- TortoiseSVN / Subversion
- TortoiseHg / Mercurial
- TortoiseGit / Git
I know there are more features which would be possible using the commandline - but in this question I only want to consider the features I can access using the frontend possibilities / TortoiseXXX offered without commandline usage.
That is the reason why I don't consider that question as a duplicate to Git vs Mercurial vs SVN
During the last years I used all three Version Management Systems (TortoiseSVN, TortoiseHg, TortoiseGit) and tested them thoroughly.
Here is my conclusion:
TortoiseSVN / Subversion (SVN)
Advantages:
- Possibility to check out only a part/subfolder of the complete repository
- Revision comments and revision username can be changed at a later time without changing/influencing any checksum or revision ident number.
- Possibility to check-in empty folder (structures)
Disadvantages:
- No distributed version management System (you always need to have connection to the server-repo)
- The last checked-in revision cannot be changed / amended / rolled back
TortoiseHG / Mercurial (HG)
Advantages:
- Distributed version management system
- Renaming of files can be defined manually as well as detected automatically (in a special dialog => algorithm: similarity check of file content)
- In TortoiseHg-Workbench all revision trees are displayed (contrary to Git)
- There are revision numbers as well as revision checksums ("Hash") available (easier orientation for humans than e. g. in Git!)
- Newest version still runs in Windows XP
- Before pulling from or pushing to another Repo it is possible to review the affected revisions (and abort the action if necessary)
- Shelve is a ingenious function to save several (unrevisioned) changes temporarily (in that way neither in SVN nor in Git ("Stash") available)
- There is no annoying distinction between bare and non-bare repositories (in contrast to Git) -> Sending of revisions to partner repo is possible even in checked-out state, because only the history of the partner repo is affected (in contrast to Git)
- TortoiseHg installs a "Workbench" automatically
- The history can easily be changed using the Extension "mq" - wrong check-ins or branches don't have to stay in the repo forever but can be deleted - but be careful: this will lead to different checksums and therefore to new branches in cloned repos...
- Short learning curve
- Simple installation without many questions, consumes less than 100MB of hard disk space
- Idiot safe - with standard installation it is not easy to destroy a repo
Disadvantages:
- It is not possible to check out and commit single folders into the repo (if you have a big repo and want to have only a small part of it)
- It is not possible to check-in empty folders / folder structures
TortoiseGit / Git
Advantages:
- Widespread (many people use it)
- Distributed version management system
- History can be changed/rebuilt (single revisions can be deleted/changed)
- SVN-Repositories can be imported
- It is possible to send single branches to another Bare-Repo (or be imported from another Repo) => Way of thinking in "Heads"
Disadvantages:
- Renaming of files/folders cannot be influenced! This type of info is not stored within the repo and is re-detected every time the repo is viewed. Sometimes the algorithm ends up in a wrong result.
- Before pulling changes out of a partner repo it is not possible to review the imported revisions before pulling them. A comparison of two repos seems only to be possible in a optical(!) way
- Sending revisions can only be done into a bare-repository (in HG this problem doesn't exist)
- There are not "human-readable" revision numbers - only a SHA-1-Hash
=> orientation problems in a Repo!!
- TortoiseGit has no Workbench by default (Handling only possible via context menu respectively multiple open windows or by terminal)
- Function "Stash" is not so powerful and clear like function "Shelf" in Mercurial/Hg
- Rebuilding of a repo leaves data remnants in the file system - if you accidentally check-in a huge file you won't get it out and shrink your repo easily!
- It is not possible to check-in empty folders / folder structures
- Using the annotate function the coloring of the individual changes in a file are dangerously deceptive! Different changes which were done within a small timespan are colored only slightly different!!!
- If a file was changed in revision X and in Revision X+5 and you look which changes were made in Revision X+5, then the compare tool will show the revisions X+4 and X+5 in the headline. Better would be to show revisions X and X+5! => Gapless change history not possible in that way!
- Revision comments can be done afterwards, but will not be pushed/pulled into partner repos. So they might get lost eventually :-(
- You have to install two different software packages (Git + TortoiseGit). Together they consume more than 600 MB of your hard disc
- It is quite easy to destroy a Repo with "the wrong click" - keep enough Backups if you want to stay happy...
- Relatively hard learning curve - you need more time to get along with the functions
Conclusion
Although I first was biased against TortoiseHg I had to reluctantly admit that it is the system with the most advantages.
For myself I decided to use TortoiseHg / Mercurial after about 3 years of comparing.