Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
At his blog, Jelmer Vernooij has written a detailed retrospective on the history of the Bazaar version control system, including a lot of analysis of the project's ups and downs over the years. "We just made these changes to the file format as they came along, rather than accumulating them. This meant that at one point there was a new format every couple of months. Later on, we did slow down on format changes and no new format has been introduced since 2009. Unfortunately we have been unable to shake the image that we introduce a new file format every fortnight.
"
Posted Dec 20, 2012 4:01 UTC (Thu)
by yarikoptic (guest, #36795)
[Link] (1 responses)
On a related note -- happen Canonical not closed-sourced launchpad development until "nobody cared anymoe", its engine as well as bzr could have been different now. They could have been approached by contributors/developers wanting other VCS backends in LP than bzr. That could have not only made launchpad a platform that others could deploy privately, but probably could help bzr as well.
Posted Dec 20, 2012 14:17 UTC (Thu)
by cmorgan (guest, #71980)
[Link]
Its useful to see the explosion of different ideas around a similar concept, git, arch, hg, bzr, but its also nice when there is some consolidation around a smaller set of tools that are most suitable, most popular etc so we can all have something we know how to use.
Posted Dec 20, 2012 7:15 UTC (Thu)
by Lukehasnoname (guest, #65152)
[Link] (18 responses)
Here's an obligatory anecdote: I have tried to learn git several times, and I find its command names and tools somewhat overwhelming, and inconsistent in naming.
I tried bzr once. I followed the tutorials on the project site, and its presentation of DVCS concepts made sense to me immediately, and I really enjoyed using it for the week or so that I got back into programming :)
If I get the itch to make my site again, it will be controlled with bzr.
Posted Dec 20, 2012 8:16 UTC (Thu)
by djc (subscriber, #56880)
[Link] (1 responses)
Posted Dec 21, 2012 23:02 UTC (Fri)
by kleptog (subscriber, #1183)
[Link]
Since I grasped the idea of the index in git, I find it difficult to use any other VCS. The way git allows you to make changes to your source tree and then selectively commit them (git add -p) is incredibly addictive. The MQ extension in Mercurial tries, but ultimately fails because the underlying model doesn't support it.
Git has a really simple mental model, and all its commands are part of a toolkit to work on that model. Mercurial keeps telling me can't do what I want. Rewriting history is nice for perfectionists, and git's toolkit approach makes it possible for tools like Gerrit to integrate the review process seamlessly with the revision control.
IMHO Mercurial really needs to be able to support a Gerrit-like workflow before I'd seriously consider using it in another project.
Posted Dec 20, 2012 8:41 UTC (Thu)
by dgm (subscriber, #49227)
[Link] (15 responses)
I think there are some factors. One, of course, is the Torvalds factor. But there are more. The most important one is that, in fact, you only need a dozen commands and four or five concepts to make good use of git. From there on, you can grow organically.
But the most important factor is that git has reached the critical mass of help around faster. Should I have any problem doing anything with git, 99.99% of the time a bit of google-fu leads to the solution, and usually leads you to discover something new you didn't know was possible. That's very rewarding. It's very possible that this mass of help and workflows floating around in blogs and forums is caused by git's own "imperfections". Another case of worse-is-better, maybe?
Finally, there are always "easy git" (and the rest of alternative "porcelain") for those that like more consistent names and commands. It's nice and delivers as promised, but I personally gave up and went with the default. The added value of the forums and blogs is just to big to be ignored.
Posted Dec 20, 2012 10:32 UTC (Thu)
by jengelh (guest, #33263)
[Link] (10 responses)
Maybe people started to realize it is not the UI "bling" (or lack thereof) that counts, but having the implementation Done Right, and all that _while_ retaining or increasing productivity (measurable; PHBs counting commits per time in the SCM).
Posted Dec 20, 2012 14:34 UTC (Thu)
by yarikoptic (guest, #36795)
[Link] (9 responses)
So, for anyone who is asking me if that is indeed true that HG/Bzr is easier on the mortals' brains -- I am answering "Maybe, but not", giving them 5 minutes "tutorial", explaining them the meaning of RTFM, reference them Git foundations by M.Brett (http://matthew-brett.github.com/pydagogue/foundation.html) for a night fun reading, and people usually become happy GIT users down the road.
Is GIT perfect? nope -- indeed I wish GIT had similar got SVN and Bzr handling of remotes without needing local clones, but those usecases come rare enough. And hopefully land in some state in GIT in the future.
Posted Dec 20, 2012 15:52 UTC (Thu)
by Cyberax (✭ supporter ✭, #52523)
[Link] (7 responses)
Posted Dec 20, 2012 16:11 UTC (Thu)
by yarikoptic (guest, #36795)
[Link] (6 responses)
"svn log REMOTE/trunk" to get recent activity on the trunk (or a particular file of interest )
without fetching e.g. 100MB of the current content of the REMOTE's master treeish?
Posted Dec 20, 2012 16:59 UTC (Thu)
by hummassa (subscriber, #307)
[Link] (5 responses)
will not get the whole tree, but just the info and files for the last 20 commits
Posted Dec 20, 2012 17:09 UTC (Thu)
by yarikoptic (guest, #36795)
[Link] (4 responses)
1. see what files are there NOW (after all GIT is a content tracking, right? ;-) )
svn (and probably bzr, according to the blog -- I never used those features myself) provide such functionality. I did need it a few times too. That is why was my comment
Posted Dec 20, 2012 17:20 UTC (Thu)
by hummassa (subscriber, #307)
[Link]
Posted Dec 20, 2012 18:13 UTC (Thu)
by tuna (guest, #44480)
[Link] (1 responses)
Posted Dec 20, 2012 19:59 UTC (Thu)
by jengelh (guest, #33263)
[Link]
diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c
will get you a .git/objects/55/0811365ac655c3b2d4f9183112e15ad0ae17ba. It is compressed, but it is still standalone/complete/non-deltified. You can nuke all other objects, and git show 550811365 should still succeed.
Deltified packs are a strap-on option (one that's enabled by default because of its usefulness) to the base design.
Posted Dec 20, 2012 19:30 UTC (Thu)
by dlang (guest, #313)
[Link]
doing a
git clone --depth 20 server:git/repo
doesn't give you only the files that have changed in the last 20 commits, it gives you ALL the files in the project, as they existed (changed or not) for the last 20 commits
so if you only care about what the files are NOW you can do "--depth 1", no need to know when it changed.
If you want the last 20 changes of a file, and that file hasn't changed for the last 1000 commits, then you really do want the full history, because the file may not have changed 20 times since it was created
Posted Dec 21, 2012 3:13 UTC (Fri)
by mathstuf (subscriber, #69389)
[Link]
I was using Mercurial for < 1 hour and hit a (what I consider to be) data-loss bug[1]. Granted, I didn't really read a proper hg tutorial, but the bug is still basically untouched even with a testcase and is marked as a bug because I used hg "wrong". My biggest problems with it are[2]:
- no index (this is the real killer for me using it day-to-day); and
I understand git being a little steep at first (but so is Vim, emacs, etc.). Understanding how git views things is a core part of groking it enough to be proficient with it. Basically, I don't care as much about the learning curve of tools I use every day, I just require them to let me get my work done. "Intuitiveness" is useless to me. I'd rather it work and work well. If I used Mercurial every day, with the way I've gotten accustomed to working, I'd probably hit that bug at least once a week.
[1]http://bz.selenic.com/show_bug.cgi?id=3423
Posted Dec 20, 2012 15:19 UTC (Thu)
by nix (subscriber, #2304)
[Link]
The number of such workflows, many closely similar, and all accompanied by deep changes in the behaviour of lots of bzr commands, is frankly overwhelming. I still can't keep them separate in my head despite much trying. And I am not the only one (there was a comment in the recent bzr-development-stopped thread which said much the same, and that thread was mostly populated by longtime users and developers of bazaar).
Posted Dec 21, 2012 5:28 UTC (Fri)
by dpotapov (guest, #46495)
[Link] (1 responses)
Some complains about Git being difficult to learn comes from its early days. (Before Git 1.5.0, Git did not have any UI suitable for normal folk, and then the user documentation was somewhat scarce or confusing as it often referred to some low-level "plumbing" commands, but many issues got fixed over time.)
Now I think most complains come from people who try to use Git in a centralized workflow as if it were CVS or SVN. Git appears unnecessary complex for that workflow and does not follow CVS naming convention. While Mercurial and Bazaar has tried to make some things more CVS like, Git has focused more on better support of distributed workflows and general flexibility. (Linus Torvalds is known for his disdain to CVS: "I'm trying my best to be a humanitarian and rid the world of the scourge that is CVS, but I'm not sure I can undo the untold mental damage wrought by it over decades of quiet suffering.")
"Easy to use" is rather subjective, it often depends on past experience and your workflow. In simple cases, usually you can see one to one match between Git, Mercurial or Bazaar commands, though those names may be different. For example, "git pull" = "bzr update" = "hg pull --update".
Apparently, Bazaar uses "update" due to tradition going back to CVS, where developers periodically use "cvs update" to merge their own (not yet committed ) changes with the upstream. In the Linux kernel workflow, developers are discouraged from doing unnecessary merges their topic branch with the current 'master' branch. Typically, it is the upstream maintainer who pulls changes and resolves possible conflicts. Thus 'pull' makes more sense in this context: Linus Torvalds does not update his master branch, he pulls new changes from his lieutenants.
Another thing is that Mercurial and Bazaar tries to give you a nice set of basic commands but for anything else you need plugins (or extensions in Mercurial). If you install Git, you get a lot of power out-of-the-box, so naturally it comes with more commands, and Git does not try to hide useful things from you (like the staging area). So some people find it more difficult in the beginning, but once you understood the core model of Git, most things immediately start to make sense, and Git is more transparent in what it does.
Posted Dec 23, 2012 12:09 UTC (Sun)
by juliank (guest, #45896)
[Link]
Posted Dec 27, 2012 13:10 UTC (Thu)
by cstanhop (subscriber, #4740)
[Link]
Github.
Posted Dec 20, 2012 11:46 UTC (Thu)
by coriordan (guest, #7544)
[Link] (4 responses)
"Move on" sounds like a nice way to say "abandon", but I don't see a reason for people to abandon BZR.
Posted Dec 20, 2012 23:21 UTC (Thu)
by nickbp (guest, #63605)
[Link]
Posted Dec 25, 2012 8:13 UTC (Tue)
by cmccabe (guest, #60281)
[Link] (2 responses)
To be honest, however, I think it would be a good thing for bzr to ride off into the sunset. I think most developers don't have time to master all of bazaar, mercurial, darcs, BitKeeper, arch, monotone, and git. You kind of have to pick one or two to focus on, and it looks like the community has made its choice.
I think everyone pretty much agrees that git has a lot of abilities that the other systems don't-- for example, the ability to handle big repositories without grinding to a halt. In contrast, the only thing that's ever been pointed out as an advantage of the other systems is a "better UI." I have the feeling that in a lot of cases "it has a better UI" is code for "I was exposed to it first."
With regard to the a-word, continuing to use a legacy system can mean "abandoning" the wider developer community, and that's far more important than any individual project.
Posted Dec 25, 2012 17:15 UTC (Tue)
by bronson (subscriber, #4806)
[Link] (1 responses)
Of the remaining three, I agree, bzr is the least engaged. No need to hurry its departure, it'll happen soon enough.
Just imagine how many paid man-hours Canonical dumped into bzr...
Posted Jan 7, 2013 14:06 UTC (Mon)
by alex (subscriber, #1355)
[Link]
Posted Dec 20, 2012 12:50 UTC (Thu)
by rleigh (guest, #14622)
[Link]
I should have been a bzr user, given its origins with tla/Arch. Back when tla was in its infancy, I converted all my code to Arch repos, and started all my new work with tla, and used it fairly exclusively for several years. tla had many faults, but it was unique at that point, and was the only realistic alternative to CVS (before SVN was ready). baz/bzr would have been a natural upgrade path, but /at the time/ it always looked like the repo format changed so often that it wasn't ready/safe for serious use (at least, that was the impression I received). All these repos were eventually imported to git, some with a intermediate reversion back to CVS/SVN. But I do wonder if it wasn't for the initial perceptions of the project, they would have otherwise have been in baz/bzr for the last 6-8 years, and if this applied to other projects as well.
With hindsight, I think ending up using git was the best choice technically, even if the "UI" is not as friendly, but things could have ended up quite differently 6-8 years ago if bzr had been the obvious choice.
Posted Dec 20, 2012 16:45 UTC (Thu)
by iabervon (subscriber, #722)
[Link] (1 responses)
Posted Dec 22, 2012 17:13 UTC (Sat)
by Wol (subscriber, #4433)
[Link]
The main core of linux enforces a strict abstraction of the hardware, and drivers have to convert the vagaries of real hardware into the abstraction that linux expects.
I remember an article by Linus where he said taking that approach actually results in cleaner, more efficient code. If the theoretical best way to do something is X, it is better for the kernel to assume X and have a shim compensate for defective hardware, than to actually make the kernel aware of what is really going on.
Cheers,
Posted Dec 20, 2012 19:15 UTC (Thu)
by joey (guest, #328)
[Link] (2 responses)
There are bzr features mentioned in this that I didn't know about, as someone who only uses bzr very casually. One is handling of the the left/right sides of history, where one is simple (and presumably, good for rebasing) and the other contains all the detail of intermediate commits. It's apparently well ahead of git in this area.
I think it's important to keep in mind that, as the VCS area contracts and consolidates (which it clearly has been, for years), there's danger of losing innovative stuff like that. Another example is that I think bzr or other VCS developers would claim to have merge algorithms that are often better than git's for text files. It would probably be fruitful to find these ideas and bring them into git as add-ons.
Posted Dec 20, 2012 19:50 UTC (Thu)
by dlang (guest, #313)
[Link]
Posted Dec 21, 2012 3:22 UTC (Fri)
by mathstuf (subscriber, #69389)
[Link]
On the whole, I agree. There was veracity[1] which showed up a year or two back (that's when I first heard of it at least). It's got some stuff from fossil (the "all-in-one") and also does formal rename tracking (which I think git got right here). The developers also mentioned that they don't like history rewriting, but I'm not so convinced that the history being an accurate representation of how the code was written is anywhere near as important as minimizing merge conflicts (via rebase) or making changes easily to revert (not easy if a change has 5 "fix typo" commits following it later down the branch).
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Shallow clones work just fine.
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
may be I have missed the bus -- how would I accomplish with a shallow clone something similar to
"svn ls REMOTE/trunk/dir" to list all files under dir
"svn cat REMOTE/trunk/dir/file" to actually see the interesting one for me
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
git clone --depth 20 server:git/repo
git log # will show the last 20 commits
ls dir
cat dir/file
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
2. what is the content of the file NOW, regardless when was it modified -- 1 commit back, or 1000 commits back
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
index 4bf3dc4..5508113 100644
[...]
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
- there wasn't anything that did git rebase -i nearly as easy last time I tried (which I use often, but could probably be get used to missing if there was painless merge resolution (see git mergetool) and something like git rerere).
[2]Technically, "were" since I'll be using something to convert any Mercurial repository I use over to git first. The verbiage change just doesn't work well with me.
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Still working and useful
Still working and useful
Still working and useful
Still working and useful
not to mention it's a GNU project
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Wol
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system
Vernooij: Bazaar-NG: 7 years of hacking on a distributed version control system