Git, Mercurial or Bazaar - which do you use most?

Discussion area about developing or extending OGRE, adding plugins for it or building applications on it. No newbie questions please, use the Help forum for that.
Post Reply

Which of the following distributed version control systems do you use the most?

Poll ended at Mon Mar 15, 2010 3:00 pm

Git
48
48%
Mercurial
45
45%
Bazaar
6
6%
 
Total votes: 99

User avatar
Klaim
Old One
Posts: 2565
Joined: Sun Sep 11, 2005 1:04 am
Location: Paris, France
x 56
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by Klaim »

Rebase is available in mercurial but that seem to be "recent" AFAIK.

By the way, the analysis from Google: http://code.google.com/p/support/wiki/DVCSAnalysis
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Hm, I just reviewed my Bazaar conversion of the Ogre repository, and on close inspection it turns out that the majority of the 700 Mb converted repository resided in a directory called obsolete_packs. Both the name and a quick google search suggest you can safely get rid of the contents of that folder (not the folder itself, though). I did that, everything still seems to work, and the repository size is now down to 170 Mb. That sounds a lot more competitive and fits the claims of the bazaar team that they have in fact gotten to the level of Mercurial with bzr 2.0.
As a test, I also pushed the trunk branch to launchpad, the process went smoothly, no interruptions whatsoever. It's here if you want to take a look: https://code.launchpad.net/~cabalistic/testogre/trunk

Now, I still can't really compare bzr's features to any of the other because I'm still a newbie when it comes to DVCS in general. Though if you want me to test/investigate something in particular, I'd be happy to do so. Aside from feature comparison, I can actually see a few advantages of bzr, which may or may not be relevant:
  • While in this vote bzr comes in last, we need to consider that there are many more users who will never have used any of the tools. From such a perspective I must say that I find bzr appealing because it has the most 'professional' looking website and offers easily accessible, up-to-date, packages/installers for all major platforms, including Windows, Mac OSX and pretty much any major Linux platform.
  • On the same note, bzr ships with its own GUI as part of the package, which means that this GUI is available and the same on all platforms. Provided that the GUI is feature-complete, it would provide a common ground on all platforms, and potential guides we'd write for new users could focus on a single tool.
  • Launchpad integrates directly into bzr and provides shortcuts for repository names. For example, you could checkout my above branch via

    Code: Select all

    bzr branch lp:testogre
    . Seeing as how I constantly find myself looking up the URLs for svn repositories, that would be a lot easier to remember :)
Of course, neither of these points is essential in any way, there are more important issues. But I think for entirely new DVCS users bzr might actually be the most accessible one.
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

nikki wrote:I'm not sure, but the AFAIK (by the last time I read about it), in mercurial you can only make branches by cloning. One feature I love about git in particular is the ability to have local branches. Oh and, rebase.
Local branches in Git are indeed cool. However, they also add a complication - that your local branch names are entirely separate and in fact can be connected to remote branches arbitrarily. I've become slightly confused about this in the past until I settled on a naming convention to identify which local branches were pushing to upstream and which were just for local consumption.

Mercurial has a local branch extension for doing essentially the same thing, but by default branches that you pull are automatically named the same. This is essentially what I do with Git too, but at least here the default behaviour is self-explanatory.
CABAListic wrote:Hm, I just reviewed my Bazaar conversion of the Ogre repository, and on close inspection it turns out that the majority of the 700 Mb converted repository resided in a directory called obsolete_packs. Both the name and a quick google search suggest you can safely get rid of the contents of that folder (not the folder itself, though). I did that, everything still seems to work, and the repository size is now down to 170 Mb. That sounds a lot more competitive and fits the claims of the bazaar team that they have in fact gotten to the level of Mercurial with bzr 2.0
Ok, that's cool. I shelved Bzr mostly because it seemed to be similar in ease of use to Mercurial but had less support but having a handle on it is useful. What speed is your upstream internet connection? I'm having problems with my 256k upstream connection with BitBucket & dropped connections.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

sinbad wrote:Ok, that's cool. I shelved Bzr mostly because it seemed to be similar in ease of use to Mercurial but had less support but having a handle on it is useful. What speed is your upstream internet connection? I'm having problems with my 256k upstream connection with BitBucket & dropped connections.
Yes, they probably are very similar, it just seemed that since BitBucket gave you problems it might be worth to reconsider Bazaar, too. Now, I must admit I don't know my actual upstream size, but from experience I think I can get upload rates of up to 100 kb/s. During the push to Launchpad Bazaar showed varying upload rates roughly between 60 and 100 kb/s, so that was quite acceptable, I think.
If you want I can give you write access to my Launchpad test branch :)
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Btw, I don't know how this compares to BitBucket, GitHub and Gitorious, but Launchpad's bug tracker (assuming you are using it) can create direct links between a particular bug report and a branch or commit which is supposed to fix that bug. Due to the launchpad plugin in bzr, you don't even need to do that in Launchpad itself, but you can do:

Code: Select all

bzr commit --fixes lp:#bugid
Something similar is possible with their 'blueprints' feature, which are essentially project ideas / proposals / plans.
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

I've contacted BitBucket support, the problem is probably down to HTTP timeouts and I should use SSH instead - I'd actually tried to before but TortoiseHg doesn't like standard Putty plink.exe so it wasn't working, I have it working now with TortoisePlink.exe. Will update once I've tried the push again - right now my servers monthly backups are uploading though so it's a bad time to test :)

Trac used to have a nice feature that it would automatically link bugfixes if you just mentioned the bug number (#NNNN) in your commit message, which was even better :) I don't know if any of the DVCS hosts systems support this yet.

The feature I most liked about Gitorious and which I find lacking in BitBucket is management of the merge request queue. On Gitorious instead of a patch list they had a queue of merge requests from repo clones, which could be statefully managed just like a patch list but obviously because they're backed by a repo if it needs revisions it's a lot easier to track. BitBucket doesn't really have this, there's a patch queue much like on Sourceforge, and you can submit a 'pull request' but these just seem to sent a one-off notification rather than being a tracked entry in a master list. Does Launchpad have anything like that?
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Looks like it. This is apparently what you get when someone proposes a merge to your branch:
https://code.launchpad.net/~bzr-pqm/bzr/bzr.dev/+merges

Re bugtracker: Well, this --fixes lp:#bugnum is apparently just some sort of extra metadata bzr can store. You can apparently also store something else and have a mantis module pick it up (theoretically, anyway), it just happens to be integrated with the launchpad bugtracker, so I found that kind of cool :)
User avatar
_tommo_
Gnoll
Posts: 677
Joined: Tue Sep 19, 2006 6:09 pm
x 5
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by _tommo_ »

sinbad wrote:Trac used to have a nice feature that it would automatically link bugfixes if you just mentioned the bug number (#NNNN) in your commit message, which was even better :) I don't know if any of the DVCS hosts systems support this yet.
Uhm... i am sure that in my project page Bitbucket does the same :?
OverMindGames Blog
IndieVault.it: Il nuovo portale italiano su Game Dev & Indie Games
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

So far I've only seen the integrated merge request tracking in Launchpad and Gitorious, here's a Gitorious example: http://gitorious.org/gitorious/mainline ... uests/1979

This is a really nice way to handle patches. BitBucket has 2 features that sort of do this, but they're not quite there:
a) Issue Tracker: this is just like the Sourceforge tracker and you can attach patches. Community collaboration 1.0 ;) This does the tracking, but the merging is still manual via patches.
b) Patch Queues: you can create Mercurial Queues against your repository and have people push changes to them. This does the merging, but there's no tracking of the status of anything as regards acceptance etc

It seems like you could create a merge request system by using the issue tracker and the patch queue together, but it's a far cry from the nicely integrated systems on Gitorious and Launchpad. I haven't found this feature on GitHub either yet. I have to say, I'm not that impressed by GitHub, it's very pretty but in terms of functionality it seems to be missing quite a few things. They only have a 'Pull Request' option which is just a person-to-person notification, not a proper project-wide tracker. I'd say GitHub and BitBucket seem to be at roughly the same level (with GitHub being prettier but BitBucket having a couple of extra features) but Gitorious and Launchpad have more useful meat to them.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Ok, gitorious's merge queue is slightly nicer because it includes a short summary in the overview. I find that more useful than the branch name which launchpad displays. Not a deal breaker, but that might be worth a suggestion to the launchpad team :)
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

So I played a bit more with launchpad, reported a bug for the testogre project and forked a branch to fix it. Unlike bitbucket etc., launchpad offers no link to clone/fork a branch, instead you need to fork the branch locally on your computer, make your changes, and then you can push it back to launchpad, creating a personal branch. That branch is automatically created as a stacked branch, so only your changes are transmitted. (Luckily so, if you had to download a 200 Mb branch only to then upload those 200 Mb to get a forked personal branch, that would have been a deal breaker.)
Linking the commit in that branch to my bug report worked flawlessy via the --fixed argument to bzr commit. The bug report and the additional branch now link each other.

So far I like launchpad. :)
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

I've talked to the BitBucket guys, who are very responsive - they have plans to extend the Pull Request functionality they have now, which is basically the same as GitHub's Merge Request feature and thus very, very basic, so that it operates more like Gitorious / Launchpad. It's not there yet though.

I've just finished pushing my Mercurial conversion to BitBucket, it's here: http://bitbucket.org/sinbad/ogre/

SSH is much more reliable now I have it working with TortoiseHg but it still took 5 1/2 hours to upload. Hopefully I can incrementally add to it quicker now though. TortoiseHg provided absolutely no functional progress bar or other indication of how far it had got while pushing so that was pretty annoying, but at least it did complete.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Hm, I don't know how fast your upload is in comparison, but upload to Launchpad took a bit less than half an hour. Granted, I only uploaded one branch, but I think trunk takes the majority of the space in my converted repository, so total time should probably not exceed 1 hour.
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

My upload speed here is absolutely terrible so it's not that far off for 200Mb. In theory I get 256kbit/s up but in reality it's more like 50kbit/s. I hate ADSL.

I'd really like to have seen the multi-branch Launchpad version, because when I tried Bazaar I wasn't sure I was keen on the way they handled branches.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

I read your comments about that, though I have to say I can't really understand them right now. Probably because I don't know how the other systems handle branches, or even what exactly branches need to be able to do for us :)
I'll see if I can do a full upload of all branches to launchpad later for completeness.
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

In other systems, branches are logical constructs contained within the context of the repository. A branch cannot exist alone. Even Subversion, where branches are URLs, the branch has to be under a common URL prefix so it's 'owned' by the repository.

In Bazaar, branches are repositories in their own right. The default when cloning is to clone just that branch. To switch a branch in a working copy, you effectively have to clone again (by rebinding). Compare this to Mercurial and Git where once you've cloned, you have all the branches available for switching immediately, locally.

Also this means when merging, it feels almost like you're pulling two unrelated repositories together, since you have to point at the full path, because your cloned version is just one branch.

Also, if I want to create a new branch from my current work, I have to create a whole new working copy, because I have to branch 'to' something - the branch is a location, not a logical name.

I dunno, Bazaar's way just feels weird, kind of like a hybrid between Subversion and a DVCS and I think it gains the complexity of the DVCS but some of the issues of the Subversion approach (needing a server to switch existing branches, 'heavy' branch overhead in local copies).
User avatar
jacmoe
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 20570
Joined: Thu Jan 22, 2004 10:13 am
Location: Denmark
x 179
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by jacmoe »

Sounds an awful lot like Mercurials branching by cloning ?
Mercurial does have branches, but some find it easier to maintain when using clones as branches.
The Mercurial project does that, and Ogitor does it. Because it gives you meaningful URLs:
hg.ogitor.org/unstable and hg.ogitor.org/0.3 are branches, not separate repositories. While it might seem like they are, they share the same history.
With 'built-in' branches, we'd have to tell people to do a clone hg.ogitor.org and a hg branch '0.3' - it's a matter of preference in Mercurial, but it sounds odd that it's the only way in Bazaar.
If people accidentally forgot to switch branch, they'd be using the unstable (or the default branch).
/* Less noise. More signal. */
Ogitor Scenebuilder - powered by Ogre, presented by Qt, fueled by Passion.
OgreAddons - the Ogre code suppository.
User avatar
jacmoe
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 20570
Joined: Thu Jan 22, 2004 10:13 am
Location: Denmark
x 179
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by jacmoe »

Just two small tips from the Mercurial trenches:
  • Since Mercurial doesn't give you visual progress feedback when cloning larger repositories, you can use --debug and at least be able to see that things are happening.
  • If you've got a flaky connection, you can split up a clone operation by using hg clone --rev <somerev>.
You can probably split up a push as well?
/* Less noise. More signal. */
Ogitor Scenebuilder - powered by Ogre, presented by Qt, fueled by Passion.
OgreAddons - the Ogre code suppository.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

I'm still not sure I get the issue, but first I might need to know what exactly you mean by "switching branches" :)

In any case, from what I understand, yes it sounds like Bazaar's branches are more independent than e.g. Mercurial's, but I'm not sure if this actually affects the way you'd use the branches? In principle, branches can either have their individual repositories, or they can have a shared repository (which you do need to initialise first if you want to use it). Launchpad, as I understand it, keeps the branches individual (no shared repository), but will use stacked branches for branches you inherited from another branch. For example, there appears to be no way that I can directly import the full Ogre repository, but I can push all the branches individually (via a simple shell for loop), and launchpad recognises they are branched from the trunk repository and creates them as stacked branches (see http://doc.bazaar-vcs.org/latest/en/use ... acked.html).

I guess this also means you can't directly fetch ALL branches at once (is that the issue?). You pull each individually into your local shared repository, and then I'd say from what I can tell you use them pretty much like with Mercurial (?). Perhaps I'd need a concrete use case, then I can probably better understand what is the issue and investigate whether there is a way around it :)
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

Yeah, first there's the conceptual issue that I'm not sure I like 'detachable' branches as their own repos. The containment just seems backwards.

But in practical terms it causes me some workflow issues:
  • You can't pull all branches at once, so that you can then switch branches entirely locally. I'd have to pull each branch explicitly into different folders on my machine.
  • When you create a new branch you seem to have to branch into a new location. For example if I want to start an experiment, in git & hg I can branch my working copy in-situ, commit to that branch, then switch back, dealing with the experiment I just created later. Git does this best because the local branch stays local by default unless you tell it to push upstream, while Mercurial assumes you want to push all branches you create unless you use the LocalBranches non-core extension. In Bazaar I seem to have to branch into a completely new working folder which is very, very cumbersome in comparison.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Might this be what you're looking for? http://doc.bazaar-vcs.org/latest/en/use ... ckout.html
Personally I'd think I would want a separate branch for my experiments, but I'd probably create a stacked branch.

Anyway, some more on Launchpad: I'm currently pushing all of Ogre's branches to it. Launchpad by default regards all of them as my personal branches (since I pushed them). They *are* listed in the branches page of the project (https://code.launchpad.net/testogre), but as you can see, only the two branches trunk and v1-6 directly belong to the project, because I have told Launchpad that they do. (If I would properly set up the Ogre project, I'd first create a TEAM to own the project, which can also have branches, so those branches wouldn't be my personal branches, but the team's.)
In general, it appears that for any official development branch, you create a SERIES for the project, which is then displayed on the main site in a graph (see https://launchpad.net/testogre). Each series can have a main branch associated with it, which is what I did for the v1-6 series. So, a bit more of a manual setup, but perhaps more flexible/explicit? For each series, you can define milestones and releases and associate them with file downloads, it seems. Launchpad appears to me to be fairly rich with those project management options, but I don't know what the contenders have to offer here.
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

Hm, bitbucket feels a bit weird. I can't seem to get the commit log for any particular branch? Whenever I select one of the branches, I get taken to the source tab where I only see the latest commit message in that branch. When I switch to changesets, I'm back to seeing trunk commits. Is this intended?
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 66
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by sinbad »

CABAListic wrote:Might this be what you're looking for? http://doc.bazaar-vcs.org/latest/en/use ... ckout.html
I'm not sure. The example still has it accessing the central repository when switching branches. I find the terminology somewhat confused in Bazaar (a bit like Git, but not quite as bad) because they want to allow you to work in a SVN-like model too, but I find it complicates things.
CABAListic wrote:Personally I'd think I would want a separate branch for my experiments, but I'd probably create a stacked branch.
So would I, but the point is some branches are not that much of a deviation and I'd prefer not to have to create a whole new working directory for them, and I don't want to make that a remote branch necessarily. Even the checkout option is still talking about being bound to a remote branch, which is not what I want to do.
CABAListic wrote:Hm, bitbucket feels a bit weird. I can't seem to get the commit log for any particular branch? Whenever I select one of the branches, I get taken to the source tab where I only see the latest commit message in that branch. When I switch to changesets, I'm back to seeing trunk commits. Is this intended?
The changesets view just shows the latest commits. If you go forward a couple of pages you'll start to see the other branches. You can't filter the changesets per branch right now it seems (you can in TortoiseHg).
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

As far as I understand, the difference between a checkout and a branch is simply that a checkout is directly bound to another branch (not necessarily remote) and commits to that one first before doing the commit locally (i. e. svn style). You can, however, switch between branch and checkout mode at any time. So I believe (haven't tested it) you could probably do the following:

Code: Select all

bzr switch some_other_branch
bzr unbind
switch will bind (i. e. turn to checkout mode) your branch to a new master, then unbind brings you back to branch mode. Perhaps there is a more direct way, I don't know :)
CABAListic
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2903
Joined: Thu Jan 18, 2007 2:48 pm
x 58
Contact:

Re: Git, Mercurial or Bazaar - which do you use most?

Post by CABAListic »

I don't know if this is helpful, but I did the following test:
First I created a local repository and pulled the trunk and shoggoth branches.

Code: Select all

bzr init-repo ogre
cd ogre
bzr branch lp:testogre trunk
bzr branch lp:testogre/v1-6
Then I created an experimenting branch from trunk, did a quick edit in it, committed and pushed the change to trunk:

Code: Select all

bzr branch trunk experiment
cd experiment
// do some work...
bzr commit -m "Work."
bzr push ../trunk
And then I decided to change the experiment trunk to be based on shoggoth (not really sensible since trunk and shoggoth differ quite a lot, but anyway). Doing these steps works:

Code: Select all

bzr bind ../v1-6
bzr update  // get to the state of v1-6 head. will merge the contents from trunk on top of that
bzr revert   // to undo the merge and get a clean v1-6 head state
bzr unbind  // free the branch
After that, experiment is at the state of v1-6. I think you can alias these commands in bzr if you want a quicker route.

Well, that's my findings so far.
Post Reply