Hello Siebrand,
Siebrand Mazeland wrote:
Hi Juliano,
Thank you for that elaborate analysis. Aside from functionality comparison, I find one thing missing that would be important if the MediaWiki project were to facilitate another tool for SCM: multi platform support. Can you add some information on that, too, because I know that we have developers on Linux, OS X, and Windows, and we wouldn't really like to exculde one of those groups just because of the used SCM tool. Having proper clients on all major platforms is one of the reasons I really like Subversion for...
Yeah, that is something that Subversion still shines bright compared to all other tools.
If you don't mind using the command line in Windows, Git, Mercurial and Bazaar all have good command line support, virtually the same between different OSes. But usually, Windows users don't like the command line, and here is where it makes a difference.
Git is only officially supported in Windows in Cygwin, which makes it slow as a rock, and definitely no real Windows integration. Git itself was not designed to run on non-Posix platforms.
Then there is the msysGit fork that strives to "fix" that, and have Git compile on MingW32. The problem, again with Git original design, is that msysGit end up depending on bash, perl, tcl, tk, vim and other GNU ports from MingW32, most of these are aliens in a pure-Windows environment. You mostly have to run msysgit in its own private bash shell, which redefines the meaning of some Windows commands, like find, in order to match those in Linux (that is expected from Git's porcelain). Git-svn is another pain. MsysGit also offers virtually no Windows integration. It comes with some standalone interface (git-gui, gitk), and there are plans of a Tortoise-like shell integration called git-cheetah, not ready for consumption.
People argue that Git works "fine" in Windows through msysGit, but usually for people with good Linux experience, that fell comfortable in a bash shell. Most Windows developers don't match this profile.
Mercurial provides *much* better Windows support, since it is designed to run over Python with whatever it provides and making few assumptions about the underlying operating system. Python is natively supported on Windows, so the end result is much better than Git. It had a few problems in the past (e.g. with filesystem case-insensitivity), but that is fixed by now. Two-way Svn communication is still under development.
There is TortoiseHg, that provides Windows integration, and supports most operations the user usually needs, but it's interface is currently really ugly, in Gtk+ (not Windows GDI native), with buttons in strange places, etc. It shares libraries with TortoiseSVN 1.5, and works really well. It includes kdiff3, which is a great tool for merging.
Bazaar shares the same advantages of being written in Python with Mercurial. Bazaar properly handles Unicode filenames in different locales (something that both Git and Mercurial fail), and is the most user-friendly of the three. TortoiseBzr is included with the default Windows installer, has better i18n support (more friendly for non-English speakers), and is really well polished compared to TortoiseHg; but it is still experimental, and a lot of functionality is either missing or broken. It has somewhat good two-way Svn communication.
And, in case you want to keep your central Subversion repository, there is SVK. It works great in Windows, but is just a command-line tool. There is no GUI, but you have the advantage that all your current Subversion tools (specially, TortoiseSVN and Eclipse) are completely usable in a distributed manner, without modifications. In this case you use the SVK command-line to mirror, pull, push and merge, and Subversion for the local branch development. Not really user-friendly, but works well most of the time.
I have some big interest (as in scientific research interest) in version control systems. I give presentations and short courses about VCSes to teams of developers, most of them PHP, Java and C# developers, most of them in Windows environment.
The first thing that I notice clearly is that Windows developers, who don't have a lot of contact with Linux or open-source, don't care a lot about distributed version control. For them, having a user-friendly, feature-complete, fully-integrated UI like TortoiseSVN and Subeclipse is way more important than being capable of sharing commits in a distributed manner. They recognize the benefits of DVCSes, but they are more objective: "Do I really need these specific features? Will them give me a raise? No? So thanks."
Those who are more enthusiastic and want to jump into distributed version control, they find Mercurial and Bazaar much easier (and saner) to use than Git. I was once told that there is no point in spending too much time dealing and learning about a single version control tool, even though it offers more features (referring to Git over Hg), than doing actual work.
That sounded sensible, and made me think about the fact that most DVCS fuss came after Torvalds presentation (even though they weren't any news for quite a time already), and mostly around Git, and mostly moved by open-source enthusiasts. It really looks like the "Linus said so" syndrome. Open-source enthusiasts tend to regard Torvalds as a deity, and give him too much credibility, even when his mouth is just expelling a lot of bullsh*t.