Search code examples
gitmercurialtortoisesvntortoisehgtortoisegit

Quick comparison of TortoiseHg/Mercurial <=> TortoiseGit <=> TortoiseSvn/Subversion


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


Solution

  • 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.