Comparing two revisions:
Revisions for Comparing Popular Version Control Systems
| Tue, 2010-02-02 16:31 by admin | Wed, 2010-07-28 21:23 by admin | ||
|---|---|---|---|
New command for importing subversion branches correctly | new documentation link for bazaar for understanding the some major concepts | ||
| < previous diff | |||
| Changes to Title | |||
| - | Comparing Version Control Systems : Bazaar vs Mercurial (hg) vs Git | + | Comparing Popular Version Control Systems |
| Changes to Taxonomy | |||
Toturial | Toturial | ||
VCS | VCS | ||
| - | Started | + | Useful |
| Changes to Body | |||
| - | <p>It's about the sixth year since my first commit on subversion,
| + | <h3>Introduction</h3><p><strong>Why another comparison review!!?</strong></p><p>Perhaps because many of other reviews are either outdated or unfair.a</p><p><strong>What's the difference between this and the others!!?</strong></p><p>There are some differences.</p><ol><li style="text-align: justify;"><em> </em>Most of the current reviews are written by a user of one of this softwares so the author can't be fair since he has much less experience with the others, in this article however i only write about Bazaar and let the users of other DVCSs to participate and write about their favorite software.</li><li style="text-align: justify;"><em> </em>There are many resources available regarding to this topic and each one
|
| - | Moving from CVS to subversion was really amazing, subversion was
| + | has pros and cons. But the main issue i have with them is that most of
|
| - | sueprior in many ways and it served me well. But the age of Centralized
| + | them are outdated because all this DVCSs are under very active
|
| - | version control systems is over, we need much more power full softwares
| + | development. An issue that exists now, might become a feature! few
|
| - | to deal with huge opensource projects and on the run software
| + | months later. So i started this article as a research project which
|
| - | development. We should to be able to change anything, anywhere,
| + | means that just like DVCSs it's also under active development :). Anyway
|
| - | anytime, and keep track of all this changes</p><p>My main focus on this article is Bazaar but you'll see notes from my friend Antoni who is a Mercusial user.</p><p>Plugins :</p><p>Bazaar like the other three supports plugins , in my expreince <a href="http://wiki.bazaar.canonical.com/BzrPlugins?action=show&redirect=UsingPlugins#Installing%20a%20plugin">installing Bazaar plugins</a> is as easy as downloading and the extracting it into the plugins folder. That's it. it's even easier even windows.</p><p>Integration : </p><p>Bazaar
| + | if you like to read resources on other sites i suggest you to check the
|
| - | has a plugin for Eclipse, the installation proccess was not as smooth
| + | date they've been published before relying on them. (You can subscribe to this page's RSS/Feed in order to be notices of the
|
| - | as subversion but i can't say that it was difficult. i had to manually
| + | new updates.)</li><li style="text-align: justify;"><em> </em>This article is practical because it includes personal experiences from users of all these DVCSs, and challenges they've faced using them ,not only what's been written in Documentations</li><li style="text-align: justify;">I try to prevent long boring disscussions between each VCS users! i'll share my opinion at the end plus some other developers so you can see which one suits you best :)</li></ol><p style="text-align: justify;">There are two well known type of version control systems, Centralized(Like Subversion) and Distributed(Like Git). In this article i'm not going to describe the differences between this two, however it's important to understand how they work before making any decision. <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">This article</a> can be a good starting point. I consider centralized VCSs an expired type of VCS so i start with comparing distributed VCSs and if you're about to start using VCSs i suggest you start with a distributed VCS. Note that distributed VCSs like Bazaar also support Centralized VCSs Workflow.</p><p style="text-align: justify;"><span>It's about the sixth years since my first commit
|
| - | add the bzr binary and plugin folders location and also coinfugre few
| + | using Subversion,
|
| + | Moving from CVS to Subversion was eally amazing, Subversion was
| ||
| + | superior in many ways and it served me well. But the age of centralized
| ||
| + | version control systems is over, we need much more powerful <span>VCSs</span>
| ||
| + | to deal with huge projects. Now days we should to be able to work with
| ||
| + | anyone, on anything, anywhere ,
| ||
| + | at anytime, and also keep track of all this activities.</span></p><p style="text-align: justify;">The age of single all-in-one solution is over in many fields including Version Control Systems, each solution has its
| ||
| + | own pros and cons and Same applies to VCSs. So in this article i'm going to compare three major DVCSs available.</p><p style="text-align: justify;">My main focus on this article is Bazaar since i've
| ||
| + | decided to start (You can read why i decided to start with Bazaar at the Conclusions
| ||
| + | section) but i asked my friend Alfted who is a Mercurial(HG)
| ||
| + | user to help with all sections related to HG. Kudus
| ||
| + | to him. Currently i use whygitisbetterthanx.com site for Git but i'm also looking for Git user to share his personal experience by using Git with me. So if you're Git user i'll be more than happy to hear your opinion :)</p><h3 style="text-align: justify;">Understanding Concepts</h3><p style="text-align: justify;">Distributed version control system is a whole new world, with many new concepts to learn. I'm not going to write about this concepts in this article, however during my research i stumbled upon many good guides and documents that i found quite useful specially for newbies. So i'll share them here with you.</p><h4 style="text-align: justify;">Bazaar</h4><p>A great document by nice fellow Matthew Fulle<span style="font-weight: normal; color: rgb(69, 54, 33);">r (</span><span style="font-weight: normal; color: rgb(69, 54, 33);">fullermd </span><span style="font-weight: normal; color: rgb(69, 54, 33);">at #bzr IRC channel) which helps you undertand the key concepts of bazaar : </span><a href="http://wiki.bazaar.canonical.com/MatthewFuller/SpotDocs/PiecesInBrief">MatthewFuller/SpotDocs/PiecesInBrief - Bazaar Version Control</a>
| ||
| + | <span style="font-weight: normal; color: rgb(69, 54, 33);"></span></p><h3 style="text-align: justify;">History</h3><h4 style="text-align: justify;">Bazaar </h4><p>C, Python</p><h4 style="text-align: justify;">Git</h4><p style="text-align: justify;"><span style="font-family: Arial; font-size: x-small;">Written in C/C++, Perl, bash scripts<br></span></p><h4 style="text-align: justify;">Mercurial</h4><p><span style="font-family: Arial; font-size: x-small;">Written in C, Lisp, Python</span></p><h3>Installation</h3><h4>Bazaar</h4><p>Karmic : <br>Add this repository
| ||
| + | for Bazaar gui
| ||
| + | (known as bazaar explorer)</p><p>{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }ppa:bzr-explorer-dev/ppa{/syntaxhighlighter}</p><p>If
| ||
| + | |||
| + | you're not using Ubuntu Karmic more information here :
| ||
| + | https://launchpad.net/~bzr-explorer-dev/+archive/ppa</p><p>{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }sudo apt-get install bzr bzr-explorer bzr-svn
| ||
| + | {/syntaxhighlighter}</p><h3>Migration </h3><p>Obviously any DVCSs without proper migration
| ||
| + | utilities is useless for most projects, so lets see what each one has to
| ||
| + | offer.</p><h4>Bazaar </h4><p>To get started with bazaar as fast as you
| ||
| + | possible with subversion
| ||
| + | background : <a href="http://wiki.bazaar.canonical.com/BzrForSVNUsers">BzrForSVNUsers
| ||
| + | - Bazaar Version Control</a> and <a href="http://doc.bazaar.canonical.com/migration/en/survival/bzr-for-svn-users.html">Bazaar
| ||
| + | |||
| + | for Subversion users — Bazaar Migration Docs</a></p><p>You
| ||
| + | might want to have look at [#1315]</p><p style="text-align: justify;">Note : While i was
| ||
| + | trying to migrate one of my sourceproject from svn to bzr, i came into
| ||
| + | some very nasty issue due to the difference between server and local bzr
| ||
| + | version, however bazaar developers say that in 2.x serious and upwards
| ||
| + | it's no longer a issue. bazaar supports various different tree formats
| ||
| + | which can
| ||
| + | causes lots of headaches. this command helped
| ||
| + | https://sourceforge.net/apps/trac/sourceforge/ticket/517</p><h3>Performance</h3><h4>Bazaar</h4><p>Bazaar is considerably slower than the others however importing performance is work in progress.</p><h4>Git</h4><p>Git is really fast and i think everyone is agree on that.</p><h4>Mercurial</h4><p>HG is very close to Git so obviously optimization plays much more important rule than the programming language. and regarding whygitisbetterthanx.com here is Alfred's opinion : </p><ul><li> ERRATA: C++ over Python is obviously faster</li><li>Graphs can't be right, since hg's tagging is another commit,<br>
| ||
| + | therefore can't be slower</li><li>Unfairness: hg also has local tagging which is really fast, since<br>
| ||
| + | it only edits a text plain entry</li><li>Slower task for hg would be building the change history log, due to<br>the
| ||
| + | optimization on choosing whether to use snapshot/changeset, which<br>directly
| ||
| + | impacts on detriment when gathering all the info at once<br>(which is
| ||
| + | done only one time in a whole work session, since further<br>operations
| ||
| + | over change log, including refresh are optimized)</li></ul><h3>Size</h3><h4>Git</h4><h4>Bazaar</h4><h4>Mercurial</h4><p>Alfred : </p><blockquote><p>I really don't know what would be the size of Django, but Drupal 7 is near 3MB and neither of those operations spent that much time (on my old P4 single core) 96 sec a branching?! are they insane?!</p></blockquote><h3>Features</h3><p>All
| ||
| + | of the major DVCSs have the important features so i'll skip the feature
| ||
| + | that are available on all of them. Also this part is mostly a respond
| ||
| + | to <a href="http://whygitisbetterthanx.com">whygitisbetterthanx.com</a>
| ||
| + | because it seems that the information they're providing is not accurate.</p><h4>Cheap
| ||
| + | local branching</h4><h5>Bazaar</h5><p>As far as i know Bazaar supports this feature, also it might be interesting to have a look at <a href="http://doc.bazaar.canonical.com/bzr.dev/en/user-guide/filtered_views.html">Filtered views — Bazaar v2.2.0dev1 documentatio</a>
| ||
| + | </p><h5>Git</h5><p>According to <a href="http://whygitisbetterthanx.com">whygitisbetterthanx.com</a>
| ||
| + | git has this feature in a very good way!</p><h5>Mercurial</h5><p>Alfred : HG inherited good ideas from Git</p><h4>Staging</h4><h5>Git</h5><p>According
| ||
| + | to whygitisbetterthanx.com git has this feature in a very good way!</p><h5>Bazaar</h5><p>Bazaar
| ||
| + | has this feature but not out of the box, the only thing you need to do
| ||
| + | is creating another branch and bind you current branch to it, then
| ||
| + | commit you changes to that branch. when you're finished you can bind
| ||
| + | that branch to any branch you want and push/commit the changes! instead
| ||
| + | of directly committing your changes.</p><h5>Mercurial</h5><p>Just like Bazaar simulating it is not really a big deal. Alfreda has good point : </p><blockquote><p>"staging"? just make up your mind and have precisely another "cheap branch" and name it what ever you like, or even better, another "staging" repo from/to which you synchronize (push/pull) when the resulting branch is of your likings. It is just a "personal workflow" matter, not need to become another feature to be learned.</p></blockquote><h4>History model</h4><h5>Bazaar</h5><p>Alfred : Snapshot</p><h5>Git</h5><p>Alfred
| ||
| + | : Snapshot</p><h5>Mercurial</h5><p>Alfred : Changeset/Snapshot<span style="font-family: Arial; font-size: x-small;"> </span><span style="font-family: Arial; font-size: x-small;"> </span></p><h4>Network
| ||
| + | Protocols</h4><h5>Bazaar</h5><p>Local, Secure Shell (SSH), Git, and
| ||
| + | HTTP and many more (Like FTP) via Pluging</p><h5>Git</h5><p>Local,
| ||
| + | Secure Shell (SSH), Git, and HTTP. Don't know about other supported
| ||
| + | protocols</p><h5>Mercurial</h5><p>Alfred : Limited</p><h4>Tracking
| ||
| + | directories</h4><p>Why tracking directories is important?</p><p>The main reason is it also means no empty directory! there are many applications with empty directories like temp , files , templates, cache as part of their structure.</p><h5>Bazaar</h5><p>Supported and it like it pretty much
| ||
| + | :)</p><h5>Git</h5><p>Not supported, Well i think that's the problem of
| ||
| + | using Version Control which is primary designed for an specific
| ||
| + | software (Linux's Kernel)</p><h5>Mercurial</h5><p>Not supported, it's
| ||
| + | mentioned in Mercurial <a href="http://hgbook.red-bean.com/read/mercurial-in-daily-use.html">offitial
| ||
| + | documentation</a> that it's not possible to represent a completely
| ||
| + | empty directory just like CVS and Git.<br><br>My personal opinion is
| ||
| + | it's unacceptable for a modern VCS. Someone has mentioned in the
| ||
| + | documentations' comments that "Considering empty directory structures
| ||
| + | useless is simply a lack of imagination from the designers of the tool."
| ||
| + | and i'm totally agree with him.</p><h4>Dedicated Free Hosting</h4><p>Note That in my opnion it's not big deal since big free opensource hostings like Sourceforge already support this major VCSs!</p><h5>Bazaar</h5><p><a href="http://launchpad.net">launchpad.net</a></p><h5>Git</h5><p><a href="http://github.com">github.com</a></p><h5>Mercurial</h5><p><a href="http://bitbucket.org">bitbucket.org</a></p><p>Alfred's opinion regarding to whygitisbetterthanx.com</p><blockquote><p>Don't know how many hosting might git have, but bitbucket.org has good performance so it is NOT out of capacity (plus they are .org instead of .com, and their agreement reads loud and clear while not so extensive: http://bitbucket.org/site/privacy/ vs http://help.github.com/terms/)</p></blockquote><h3>GUI</h3><p>With lots of tools available out there , having a good
| ||
| + | GUI is getting more critical everyday and i think the main reason is
| ||
| + | because it decrease the learning curve dramatically.</p><h4>Bazaar</h4><p>TortoiseBzr for Windows' Explorer and Cross Platform BzrExplorer</p><h4>Git</h4><p>Haven't tried Git yet but as long as know Git is the weakest one
| ||
| + | in this area.</p>
| ||
| + | <h4>Mercurial</h4><p>TortoiseHg and it's very well designed. TortoiseHG is also cross platform.</p><p>There are many other options : http://mercurial.selenic.com/wiki/OtherTools</p><h3>Integration </h3><p>Software development without using third-party applications and IDEs is a waste of time! So we should able to use our favorite VCS via our favorite IDE!</p><h4>Bazaar </h4><p>Has a plugin for Eclipse, the installation process was not as smooth
| ||
| + | as subeclipse but i can't say that it was difficult. i had to manually
| ||
| + | add the bzr binary and plug-in folders location and also configure few
| ||
options (All couldn't be pre configured). But according to BzrEclipse
| options (All couldn't be pre configured). But according to BzrEclipse
| ||
roadmap, it's going to be much better soon. number of feature is also
| roadmap, it's going to be much better soon. number of feature is also
| ||
| - | very limited comparing to subversion.</p><p>Antonio Note : </p><p>What of the things which is very important for is the future plans :</p><p>Bazaar <a href="http://wiki.bazaar.canonical.com/Roadmap">roadmap</a> And also it looks like that bazaar developers really care about their users <a href="http://wiki.bazaar.canonical.com/ThreeWishes">ThreeWishes - Bazaar Version Control</a> , Bazaar also has <a href="http://doc.bazaar.canonical.com/bzr.0.17/developers/performance-roadmap.htm">Bazaar Performance Roadmap</a>
| + | very limited comparing to subeclipse.</p><p>It has support for most Major IDEs and <a href="https://launchpad.net/nb-bzr">NetBeans integration is under
|
| - | </p><p>There is a new website for comparing git with others, very useful. whygitisbetterthanx.com</p><p>There
| + | development</a>, no idea when it will be released.</p><p><span style="font-family: Arial; font-size: x-small;"> More information here </span><a href="http://wiki.bazaar.canonical.com/IDEIntegration">IDEIntegration -
|
| - | is also another website for comparing Bazaar and Git , they approche is
| + | Bazaar Version Control</a>
|
| + | </p><h4>Mercurial</h4><p>Mercurial is much better integrated with
| ||
| + | other applications, for
| ||
| + | example currently Netbeans
| ||
| + | does not support Bazaar.</p><h4>Git</h4><p>Idea, Eclipse, NetBeans. Don't know about the other options</p><p> </p><h3>Roadmap</h3>
| ||
| + | <p>All major DVCSs are under active development, which means that
| ||
| + | their roadmap plays an important role in the decision.</p><h4>Bazaar</h4><p>Bazaar <a href="http://wiki.bazaar.canonical.com/Roadmap">roadmap</a> And also
| ||
| + | it looks like that bazaar developers really care about their users <a href="http://wiki.bazaar.canonical.com/ThreeWishes">ThreeWishes -
| ||
| + | Bazaar Version Control</a> , Bazaar also has <a href="http://doc.bazaar.canonical.com/bzr.0.17/developers/performance-roadmap.htm">Bazaar
| ||
| + | Performance Roadmap</a>
| ||
| + | </p><h3>Plugins</h3><h4>Bazaar</h4><p>Bazaar like the other three supports plugins , in my experience <a href="http://wiki.bazaar.canonical.com/BzrPlugins?action=show&redirect=UsingPlugins#Installing%20a%20plugin">installing Bazaar plugins</a> is as easy as downloading and then extracting it
| ||
| + | into the plugins folder.
| ||
| + | That's it. it's even easier on windows.</p><h3>Notes</h3><p>There is a <a href="http://whygitisbetterthanx.com">nice website</a> for comparing git vs others, very useful. Funny thing is that HG users <a href="http://whyhgisbetterthanx.com">did the same!</a> but made their point quite clear! Also Git users made another one <a href="http://whybzrisbetterthanx.github.com/">for Bazaar!</a></p><p>There
| ||
| + | is also another website for comparing Bazaar and Git , they approach is
| ||
interesting and it's based on personal experience using Tweeter!
| interesting and it's based on personal experience using Tweeter!
| ||
| - | http://www.bzrvsgit.com/</p><p> </p><p>To get started with bazaar as fast as you possible with subversion backgound : <a href="http://wiki.bazaar.canonical.com/BzrForSVNUsers">BzrForSVNUsers - Bazaar Version Control</a> and <a href="http://doc.bazaar.canonical.com/migration/en/survival/bzr-for-svn-users.html">Bazaar for Subversion users — Bazaar Migration Docs</a></p><p> </p><h3>Short Guide for Bazaar To SVN migration</h3><p>Karmic : <br>Add this repository for bazaar gui (known as bazaar explorer)</p><p>{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }ppa:bzr-explorer-dev/ppa{/syntaxhighlighter}</p><p><br>If you're not using ubuntu karmic more iformation here : https://launchpad.net/~bzr-explorer-dev/+archive/ppa</p><p>{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }sudo apt-get install bzr bzr-explorer bzr-svn{/syntaxhighlighter}</p><p>Note :
| + | http://www.bzrvsgit.com/</p><h3>Conclusions</h3><p>In this part you can read the main reasons that people use particular VCS</p><h4>Bazaar</h4><p>Author : I
|
| - | Bazaar changes rapidly and free vcs service might no be updatodate,
| + | decided to start with Bazaar for several reasons</p><ul><li>It's written with python like mercurial and for this reason it's
|
| - | sourceforge uses 1.18 , in this case you'll need create using repo
| + | much easier to extend and develop than C or C++.</li><li>It's a
|
| - | using old format on local before import.</p><p>Note : While i was
| + | multi purpose VCS covering several different Use Cases (Workflows)</li><li>It's plugin
|
| - | trying to migrate one of my sourceproject from svn to bzr, i came into
| + | system is quite easy to use (With no compiling or building process)</li><li>It
|
| - | some very nasty issue due to the differece between server and local bzr
| + | comes with several great cross platform GUI utilities</li><li>It might have a great future</li></ul><p>Alfred : </p><blockquote><p>Why not bazaar?<br>
|
| - | version. bazaar supports various different tree formats which can
| + | The first taste: create a new repo.<br>
|
| - | causes lots of headaches. this command helped
| + | What kind of repo would you like?<br>
|
| - | https://sourceforge.net/apps/trac/sourceforge/ticket/517</p><p>Note :
| + | Which branching model will you be using?<br>
|
| - | Mercurial is much better integrated with other applications, for
| + | I really don't care much, just give me a new empty repo and let me<br>
|
| - | example currently netbeans does not support bezaar. more information
| + | start working.<br>
|
| - | here <a href="http://wiki.bazaar.canonical.com/IDEIntegration">IDEIntegration - Bazaar Version Control</a>
| + | I'll branch whatever/however I want, and if later I regret, then I'll<br>
|
| - | </p><p>Note: I don't recommend bazaar for non technical people</p><p>Note
| + | be able to convert/rebase/transplant it preserving history logs.</p><p>I think Bazaar has great opportunities to become the best one in the future<br>(except I totally disagree with their branches' workflows, which is very rigid and annoying, resembled me the sort of inflexibility of CVS/SVN)</p></blockquote><h4>Git</h4><p>Author : Why not Git? Well, although most git
|
| - | : Be careful with reviews, most of this version control systems are
| + | users are very passionate about their favorite VCS but it seems that many of them haven't even heard of/tried other
|
| - | undel active developement, an issue that exists now might be more than
| + | ones. The fact that Linus has written it or it has been used for Linux
|
| - | fix few month later. Alaywas check the review date before relying on it.</p><p>Note : The age of single all-in-one solution is over, each solution has its pros and cons. same applies to VCSs, each version control system different issues</p><h3>Resources : </h3><ul><li>Exporting as xml : http://doc.bazaar-vcs.org/plugins/en/xmloutput-plugin.html</li><li>Plugin for checking commands before commit : http://doc.bazaar.canonical.com/plugins/en/testrunner-plugin.html</li><li>http://doc.bazaar.canonical.com/bzr.2.0/en/user-guide/publishing_a_branch.html</li><li>https://launchpad.net/~bzr-explorer-dev/+archive/ppa</li><li>http://doc.bazaar.canonical.com/latest/en/user-guide/bazaar_workflows.html</li><li>http://wiki.bazaar.canonical.com/BzrExplorer</li><li>https://launchpad.net/bzr-explorer</li><li>http://svn.borg.ch/svndumptool/0.5.0/</li><li>http://svnbook.red-bean.com/en/1.1/ch05s03.html#svn-ch-5-sect-3.1.2</li><li>http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_04_21_dump-load-svn-repositories-using-svnadmin-svndumpfilter</li><li><a href="http://wiki.bazaar.canonical.com/svn2bzr">svn2bzr - Bazaar Version Control</a></li><li><a href="http://doc.bazaar.canonical.com/migration/en/survival/bzr-for-svn-users.html">Bazaar for Subversion users — Bazaar Migration Docs</a></li><li><a href="http://wiki.bazaar.canonical.com/BzrForSVNUsers">BzrForSVNUsers - Bazaar Version Control</a></li><li><a href="http://wiki.bazaar.canonical.com/Tutorials/CentralizedWorkflow">Tutorials/CentralizedWorkflow - Bazaar Version Control</a></li><li><a href="http://wiki.bazaar.canonical.com/IDEIntegration">IDEIntegration - Bazaar Version Control</a></li><li><a href="http://markpasc.livejournal.com/186489.html">assert(♥) - git equivalent to “svn copy” for forking files with history?</a></li><li><a href="http://doc.bazaar.canonical.com/migration/en/foreign/bzr-on-svn-projects.html#bzr-svn-limitations">Using Bazaar on Subversion projects — Bazaar Migration Docs</a>
| + | Kernel might be main reason people like using it.</p><p>There is two reason that i don't like git, first it does not track folders! and the second it's written by C. I'm totally against using C for everything.</p><p>BTW it
|
| - | </li></ul> | + | has awesome merge functionality which is expected since it's been
|
| + | originally developed for Linux Kernel which is all about merging!</p><h4>Mercurial</h4><p>Alfred : </p><blockquote><p>Another point that hg wins over Git and Bazaar: easy to learn and use. Definitely hg help is not so short in vain. Enabling extensions would bring more advanced help. But that short basic help is enough to start and to handle any type of workflow.</p></blockquote><h3>Final words</h3><p><a href="http://www.drupal4hu.com/node/256">So why do I hate git? |
| ||
| + | drupal4hu</a></p><blockquote><p>The great thing about git is it gives you all the configurability and
| ||
| + | flexibility of Sendmail. The downside to git is that it gives you all
| ||
| + | the configurability and flexibility of Sendmail.</p></blockquote><p>Alfred :</p><blockquote><div style="direction: ltr;" dir="ltr"><div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">Outstanding points were:</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- GUI: Hg</span></div>- History model:
| ||
| + | Hg</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Network Protocols: Bzr, Git</span></div><span style="font-family: Arial; font-size: x-small;">
| ||
| + | </span><div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;"><span style="font-family: Arial; font-size: x-small;">- Programming Language: Bzr, Hg</span></span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">which makes me think that Bazaar has great opportunities to become the best
| ||
| + | one in the future</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">(except I totally disagree with their branches' workflows, which
| ||
| + | is very rigid and annoying, resembled me the sort of inflexibility of
| ||
| + | CVS/SVN)</span></div><div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;"><br></span></div></div><div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">They all born at the same time</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">Performance shouldn't be compared in terms of
| ||
| + | time per operations, since they are written in different programming languages
| ||
| + | and what matters is their algorithms' complexity order, since all of them
| ||
| + | will have performace optimizations in time</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- C/C++ is great, but the future is beyond, OOP
| ||
| + | paradigms makes code more maintainable and reliable (despite slower), therefore
| ||
| + | I go for Python/Java</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- I love Pear, but extensibility, reusability, and
| ||
| + | therefore reliability is for programming languages of the new era (C & C++
| ||
| + | are also medieval)</span></div><div style="direction: ltr;" dir="ltr"><div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">Programming Language:</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Git is written in C/C++, Perl, bash scripts:
| ||
| + | -1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Hg is written in C, Lisp, Python: +1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Bazaar is written in C, Python: ++1</span></div>
| ||
| + | <div> </div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">History model:</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Git: Snapshot: -1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Hg: Changeset/Snapshot: ++1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Bazaar: Snapshot: -1</span></div>
| ||
| + | <div> </div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">Network protocols:</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Git: several: +1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Hg: limited: -1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Bazaar: several: ++1</span></div>
| ||
| + | <div> </div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">Tracking directories:</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Bazaar: yes: +1</span></div>
| ||
| + | <div style="direction: ltr;" dir="ltr"><span style="font-family: Arial; font-size: x-small;">- Git & Hg: no: -1 (but Mercurial's
| ||
| + | documentation states well founded arguments for this)</span></div></div></blockquote><h3>News</h3><p>More and more software and developers are migrating to DVCSs, here you can read their favorite DVCSs </p><ul><li>2010-2-x : Drupal.org's infrastructure team has finally decided to use Git instead
| ||
| + | of Bazaar. I read most of the comments there which was extremely useful. But the reason they choosed Git was mostly because of the number of people willing to help. So i can say that Git community is very active. <a href="http://groups.drupal.org/node/48818">Evaluation discussion for
| ||
| + | how to move Drupal.org off of CVS | groups.drupal.org</a></li></ul>
| ||
| + | <p><a href="http://wiki.bazaar.canonical.com/IDEIntegration"></a>
| ||
| + | </p><h3>Resources </h3><ul><li><a href="http://wiki.bazaar.canonical.com/BzrExplorer">BzrExplorer - Bazaar Version Control</a></li><li><a href="http://en.wikipedia.org/wiki/Distributed_revision_control">Distributed revision control - Wikipedia, the free encyclopedia</a>
| ||
| + | </li><li><a href="http://doc.bazaar.canonical.com/latest/en/user-guide/bazaar_workflows.html">Workflows — Bazaar v2.1.1 documentation</a>
| ||
| + | </li><li><a href="https://launchpad.net/%7Ebzr-explorer-dev/+archive/ppa">Bazaar Explorer PPA : “Bazaar Explorer Developers” team</a>
| ||
| + | </li><li><a href="http://doc.bazaar.canonical.com/bzr.2.0/en/user-guide/publishing_a_branch.html">Publishing a branch — Bazaar v2.0.5 documentation</a>
| ||
| + | </li><li><a href="https://launchpad.net/%7Ebzr-explorer-dev/+archive/ppa">Bazaar Explorer PPA : “Bazaar Explorer Developers” team</a>
| ||
| + | </li><li><a href="http://doc.bazaar.canonical.com/plugins/en/testrunner-plugin.html">testrunner - Run a command before allowing a commit — Bazaar v2.0.x documentation</a>
| ||
| + | </li><li><a href="http://doc.bazaar.canonical.com/plugins/en/xmloutput-plugin.html">xmloutput - XML interface for external tool integration — Bazaar v2.0.x documentation</a>
| ||
| + | </li><li><a href="https://launchpad.net/bzr-explorer">Bazaar Explorer in Launchpad</a>
| ||
| + | </li><li><a href="http://svn.borg.ch/svndumptool/0.5.0/">SvnDump 0.5.0</a>
| ||
| + | </li><li><a href="http://svnbook.red-bean.com/en/1.1/ch05s03.html#svn-ch-5-sect-3.1.2">Repository Maintenance</a>
| ||
| + | </li><li><a href="http://blogs.nuxeo.com/dev/2006/04/dump-load-svn-repositories-using-svnadmin-svndumpfilter.html">Dump and load foreign subversion repositories using svnadmin and svndumpfilter, Nuxeo Developers Blog</a>
| ||
| + | </li><li><a href="http://wiki.bazaar.canonical.com/svn2bzr">svn2bzr - Bazaar Version Control</a></li><li><a href="http://doc.bazaar.canonical.com/migration/en/survival/bzr-for-svn-users.html">Bazaar for Subversion users — Bazaar Migration Docs</a></li><li><a href="http://wiki.bazaar.canonical.com/BzrForSVNUsers">BzrForSVNUsers - Bazaar Version Control</a></li><li><a href="http://wiki.bazaar.canonical.com/Tutorials/CentralizedWorkflow">Tutorials/CentralizedWorkflow - Bazaar Version Control</a></li><li><a href="http://wiki.bazaar.canonical.com/IDEIntegration">IDEIntegration - Bazaar Version Control</a></li><li><a href="http://markpasc.livejournal.com/186489.html">assert(♥) - git equivalent to “svn copy” for forking files with history?</a></li><li><a href="http://doc.bazaar.canonical.com/migration/en/foreign/bzr-on-svn-projects.html#bzr-svn-limitations">Using Bazaar on Subversion projects — Bazaar Migration Docs</a></li><li><a href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software">Comparison
| ||
| + | of revision control software - Wikipedia, the free encyclopedia</a></li><li><a href="http://www.infoq.com/articles/dvcs-guide">InfoQ: Distributed Version Control Systems: A Not-So-Quick Guide Through</a></li><li><a href="http://code.google.com/p/support/wiki/DVCSAnalysis">DVCSAnalysis - support - Analysis of Git and Mercurial - Project Hosting on Google Code</a>
| ||
| + | </li></ul> | ||
Comparing Popular Version Control Systems
Introduction
Why another comparison review!!?
Perhaps because many of other reviews are either outdated or unfair.a
What's the difference between this and the others!!?
There are some differences.
- Most of the current reviews are written by a user of one of this softwares so the author can't be fair since he has much less experience with the others, in this article however i only write about Bazaar and let the users of other DVCSs to participate and write about their favorite software.
- There are many resources available regarding to this topic and each one has pros and cons. But the main issue i have with them is that most of them are outdated because all this DVCSs are under very active development. An issue that exists now, might become a feature! few months later. So i started this article as a research project which means that just like DVCSs it's also under active development :). Anyway if you like to read resources on other sites i suggest you to check the date they've been published before relying on them. (You can subscribe to this page's RSS/Feed in order to be notices of the new updates.)
- This article is practical because it includes personal experiences from users of all these DVCSs, and challenges they've faced using them ,not only what's been written in Documentations
- I try to prevent long boring disscussions between each VCS users! i'll share my opinion at the end plus some other developers so you can see which one suits you best :)
There are two well known type of version control systems, Centralized(Like Subversion) and Distributed(Like Git). In this article i'm not going to describe the differences between this two, however it's important to understand how they work before making any decision. This article can be a good starting point. I consider centralized VCSs an expired type of VCS so i start with comparing distributed VCSs and if you're about to start using VCSs i suggest you start with a distributed VCS. Note that distributed VCSs like Bazaar also support Centralized VCSs Workflow.
It's about the sixth years since my first commit using Subversion, Moving from CVS to Subversion was eally amazing, Subversion was superior in many ways and it served me well. But the age of centralized version control systems is over, we need much more powerful VCSs to deal with huge projects. Now days we should to be able to work with anyone, on anything, anywhere , at anytime, and also keep track of all this activities.
The age of single all-in-one solution is over in many fields including Version Control Systems, each solution has its own pros and cons and Same applies to VCSs. So in this article i'm going to compare three major DVCSs available.
My main focus on this article is Bazaar since i've decided to start (You can read why i decided to start with Bazaar at the Conclusions section) but i asked my friend Alfted who is a Mercurial(HG) user to help with all sections related to HG. Kudus to him. Currently i use whygitisbetterthanx.com site for Git but i'm also looking for Git user to share his personal experience by using Git with me. So if you're Git user i'll be more than happy to hear your opinion :)
Understanding Concepts
Distributed version control system is a whole new world, with many new concepts to learn. I'm not going to write about this concepts in this article, however during my research i stumbled upon many good guides and documents that i found quite useful specially for newbies. So i'll share them here with you.
Bazaar
A great document by nice fellow Matthew Fuller (fullermd at #bzr IRC channel) which helps you undertand the key concepts of bazaar : MatthewFuller/SpotDocs/PiecesInBrief - Bazaar Version Control
History
Bazaar
C, Python
Git
Written in C/C++, Perl, bash scripts
Mercurial
Written in C, Lisp, Python
Installation
Bazaar
Karmic :
Add this repository
for Bazaar gui
(known as bazaar explorer)
ppa:bzr-explorer-dev/ppa
If you're not using Ubuntu Karmic more information here : https://launchpad.net/~bzr-explorer-dev/+archive/ppa
sudo apt-get install bzr bzr-explorer bzr-svn
Migration
Obviously any DVCSs without proper migration utilities is useless for most projects, so lets see what each one has to offer.
Bazaar
To get started with bazaar as fast as you possible with subversion background : BzrForSVNUsers - Bazaar Version Control and Bazaar for Subversion users — Bazaar Migration Docs
You might want to have look at Migrating from Subversion to Bazaar (Including special guide for Sourceforge projects)
Note : While i was trying to migrate one of my sourceproject from svn to bzr, i came into some very nasty issue due to the difference between server and local bzr version, however bazaar developers say that in 2.x serious and upwards it's no longer a issue. bazaar supports various different tree formats which can causes lots of headaches. this command helped https://sourceforge.net/apps/trac/sourceforge/ticket/517
Performance
Bazaar
Bazaar is considerably slower than the others however importing performance is work in progress.
Git
Git is really fast and i think everyone is agree on that.
Mercurial
HG is very close to Git so obviously optimization plays much more important rule than the programming language. and regarding whygitisbetterthanx.com here is Alfred's opinion :
- ERRATA: C++ over Python is obviously faster
- Graphs can't be right, since hg's tagging is another commit,
therefore can't be slower - Unfairness: hg also has local tagging which is really fast, since
it only edits a text plain entry - Slower task for hg would be building the change history log, due to
the optimization on choosing whether to use snapshot/changeset, which
directly impacts on detriment when gathering all the info at once
(which is done only one time in a whole work session, since further
operations over change log, including refresh are optimized)
Size
Git
Bazaar
Mercurial
Alfred :
I really don't know what would be the size of Django, but Drupal 7 is near 3MB and neither of those operations spent that much time (on my old P4 single core) 96 sec a branching?! are they insane?!
Features
All of the major DVCSs have the important features so i'll skip the feature that are available on all of them. Also this part is mostly a respond to whygitisbetterthanx.com because it seems that the information they're providing is not accurate.
Cheap local branching
Bazaar
As far as i know Bazaar supports this feature, also it might be interesting to have a look at Filtered views — Bazaar v2.2.0dev1 documentatio
Git
According to whygitisbetterthanx.com git has this feature in a very good way!
Mercurial
Alfred : HG inherited good ideas from Git
Staging
Git
According to whygitisbetterthanx.com git has this feature in a very good way!
Bazaar
Bazaar has this feature but not out of the box, the only thing you need to do is creating another branch and bind you current branch to it, then commit you changes to that branch. when you're finished you can bind that branch to any branch you want and push/commit the changes! instead of directly committing your changes.
Mercurial
Just like Bazaar simulating it is not really a big deal. Alfreda has good point :
"staging"? just make up your mind and have precisely another "cheap branch" and name it what ever you like, or even better, another "staging" repo from/to which you synchronize (push/pull) when the resulting branch is of your likings. It is just a "personal workflow" matter, not need to become another feature to be learned.
History model
Bazaar
Alfred : Snapshot
Git
Alfred : Snapshot
Mercurial
Alfred : Changeset/Snapshot
Network Protocols
Bazaar
Local, Secure Shell (SSH), Git, and HTTP and many more (Like FTP) via Pluging
Git
Local, Secure Shell (SSH), Git, and HTTP. Don't know about other supported protocols
Mercurial
Alfred : Limited
Tracking directories
Why tracking directories is important?
The main reason is it also means no empty directory! there are many applications with empty directories like temp , files , templates, cache as part of their structure.
Bazaar
Supported and it like it pretty much :)
Git
Not supported, Well i think that's the problem of using Version Control which is primary designed for an specific software (Linux's Kernel)
Mercurial
Not supported, it's
mentioned in Mercurial offitial
documentation that it's not possible to represent a completely
empty directory just like CVS and Git.
My personal opinion is
it's unacceptable for a modern VCS. Someone has mentioned in the
documentations' comments that "Considering empty directory structures
useless is simply a lack of imagination from the designers of the tool."
and i'm totally agree with him.
Dedicated Free Hosting
Note That in my opnion it's not big deal since big free opensource hostings like Sourceforge already support this major VCSs!
Bazaar
Git
Mercurial
Alfred's opinion regarding to whygitisbetterthanx.com
Don't know how many hosting might git have, but bitbucket.org has good performance so it is NOT out of capacity (plus they are .org instead of .com, and their agreement reads loud and clear while not so extensive: http://bitbucket.org/site/privacy/ vs http://help.github.com/terms/)
GUI
With lots of tools available out there , having a good GUI is getting more critical everyday and i think the main reason is because it decrease the learning curve dramatically.
Bazaar
TortoiseBzr for Windows' Explorer and Cross Platform BzrExplorer
Git
Haven't tried Git yet but as long as know Git is the weakest one in this area.
Mercurial
TortoiseHg and it's very well designed. TortoiseHG is also cross platform.
There are many other options : http://mercurial.selenic.com/wiki/OtherTools
Integration
Software development without using third-party applications and IDEs is a waste of time! So we should able to use our favorite VCS via our favorite IDE!
Bazaar
Has a plugin for Eclipse, the installation process was not as smooth as subeclipse but i can't say that it was difficult. i had to manually add the bzr binary and plug-in folders location and also configure few options (All couldn't be pre configured). But according to BzrEclipse roadmap, it's going to be much better soon. number of feature is also very limited comparing to subeclipse.
It has support for most Major IDEs and NetBeans integration is under development, no idea when it will be released.
More information here IDEIntegration - Bazaar Version Control
Mercurial
Mercurial is much better integrated with other applications, for example currently Netbeans does not support Bazaar.
Git
Idea, Eclipse, NetBeans. Don't know about the other options
Roadmap
All major DVCSs are under active development, which means that their roadmap plays an important role in the decision.
Bazaar
Bazaar roadmap And also it looks like that bazaar developers really care about their users ThreeWishes - Bazaar Version Control , Bazaar also has Bazaar Performance Roadmap
Plugins
Bazaar
Bazaar like the other three supports plugins , in my experience installing Bazaar plugins is as easy as downloading and then extracting it into the plugins folder. That's it. it's even easier on windows.
Notes
There is a nice website for comparing git vs others, very useful. Funny thing is that HG users did the same! but made their point quite clear! Also Git users made another one for Bazaar!
There is also another website for comparing Bazaar and Git , they approach is interesting and it's based on personal experience using Tweeter! http://www.bzrvsgit.com/
Conclusions
In this part you can read the main reasons that people use particular VCS
Bazaar
Author : I decided to start with Bazaar for several reasons
- It's written with python like mercurial and for this reason it's much easier to extend and develop than C or C++.
- It's a multi purpose VCS covering several different Use Cases (Workflows)
- It's plugin system is quite easy to use (With no compiling or building process)
- It comes with several great cross platform GUI utilities
- It might have a great future
Alfred :
Why not bazaar?
The first taste: create a new repo.
What kind of repo would you like?
Which branching model will you be using?
I really don't care much, just give me a new empty repo and let me
start working.
I'll branch whatever/however I want, and if later I regret, then I'll
be able to convert/rebase/transplant it preserving history logs.I think Bazaar has great opportunities to become the best one in the future
(except I totally disagree with their branches' workflows, which is very rigid and annoying, resembled me the sort of inflexibility of CVS/SVN)
Git
Author : Why not Git? Well, although most git users are very passionate about their favorite VCS but it seems that many of them haven't even heard of/tried other ones. The fact that Linus has written it or it has been used for Linux Kernel might be main reason people like using it.
There is two reason that i don't like git, first it does not track folders! and the second it's written by C. I'm totally against using C for everything.
BTW it has awesome merge functionality which is expected since it's been originally developed for Linux Kernel which is all about merging!
Mercurial
Alfred :
Another point that hg wins over Git and Bazaar: easy to learn and use. Definitely hg help is not so short in vain. Enabling extensions would bring more advanced help. But that short basic help is enough to start and to handle any type of workflow.
Final words
So why do I hate git? | drupal4hu
The great thing about git is it gives you all the configurability and flexibility of Sendmail. The downside to git is that it gives you all the configurability and flexibility of Sendmail.
Alfred :
Outstanding points were:- GUI: Hg- History model: Hg- Network Protocols: Bzr, Git- Programming Language: Bzr, Hgwhich makes me think that Bazaar has great opportunities to become the best one in the future(except I totally disagree with their branches' workflows, which is very rigid and annoying, resembled me the sort of inflexibility of CVS/SVN)They all born at the same timePerformance shouldn't be compared in terms of time per operations, since they are written in different programming languages and what matters is their algorithms' complexity order, since all of them will have performace optimizations in time- C/C++ is great, but the future is beyond, OOP paradigms makes code more maintainable and reliable (despite slower), therefore I go for Python/Java- I love Pear, but extensibility, reusability, and therefore reliability is for programming languages of the new era (C & C++ are also medieval)Programming Language:- Git is written in C/C++, Perl, bash scripts: -1- Hg is written in C, Lisp, Python: +1- Bazaar is written in C, Python: ++1History model:- Git: Snapshot: -1- Hg: Changeset/Snapshot: ++1- Bazaar: Snapshot: -1Network protocols:- Git: several: +1- Hg: limited: -1- Bazaar: several: ++1Tracking directories:- Bazaar: yes: +1- Git & Hg: no: -1 (but Mercurial's documentation states well founded arguments for this)
News
More and more software and developers are migrating to DVCSs, here you can read their favorite DVCSs
- 2010-2-x : Drupal.org's infrastructure team has finally decided to use Git instead of Bazaar. I read most of the comments there which was extremely useful. But the reason they choosed Git was mostly because of the number of people willing to help. So i can say that Git community is very active. Evaluation discussion for how to move Drupal.org off of CVS | groups.drupal.org
Resources
- BzrExplorer - Bazaar Version Control
- Distributed revision control - Wikipedia, the free encyclopedia
- Workflows — Bazaar v2.1.1 documentation
- Bazaar Explorer PPA : “Bazaar Explorer Developers” team
- Publishing a branch — Bazaar v2.0.5 documentation
- Bazaar Explorer PPA : “Bazaar Explorer Developers” team
- testrunner - Run a command before allowing a commit — Bazaar v2.0.x documentation
- xmloutput - XML interface for external tool integration — Bazaar v2.0.x documentation
- Bazaar Explorer in Launchpad
- SvnDump 0.5.0
- Repository Maintenance
- Dump and load foreign subversion repositories using svnadmin and svndumpfilter, Nuxeo Developers Blog
- svn2bzr - Bazaar Version Control
- Bazaar for Subversion users — Bazaar Migration Docs
- BzrForSVNUsers - Bazaar Version Control
- Tutorials/CentralizedWorkflow - Bazaar Version Control
- IDEIntegration - Bazaar Version Control
- assert(♥) - git equivalent to “svn copy” for forking files with history?
- Using Bazaar on Subversion projects — Bazaar Migration Docs
- Comparison of revision control software - Wikipedia, the free encyclopedia
- InfoQ: Distributed Version Control Systems: A Not-So-Quick Guide Through
- DVCSAnalysis - support - Analysis of Git and Mercurial - Project Hosting on Google Code

