VCS comparison table
torvalds at osdl.org
Wed Oct 18 04:35:07 BST 2006
On Tue, 17 Oct 2006, Aaron Bentley wrote:
> > That doesn't matter...
> It has significant UI impact.
Right. You have to do it your way, because of the "simple revision
Which gets us back to where we started: "simple" is in the eye of the
beholder. I personally think that git revision naming is a lot simpler,
exactly because it doesn't impose arbitrary rules on users.
For example, what happens is that:
- you like the simple revision numbers
- that in turn means that you can never allow a mainline-merge to be done
by anybody else than the main maintainer
- that in turn means that the whole situation is no longer distributed,
it's more like a "disconnected access to a central repository"
The "main trunk matters" mentality (which has deep roots in CVS - don't
get me wrong, I don't think you're the first one to do this) is
fundamentally antithetical to truly distributed system, because it
basically assumes that some maintainer is "more important" than others.
That special maintainer is the maintainer whose merge-trunk is followed,
and whose revision numbers don't change when they are merged back.
That may even be _true_ in many cases. But please do realize that it's a
real issue, and that it has real impact - it does two things:
- it impacts the technology and workflow directly itself: "pull" and
"merge" are different: a central maintainer would tend to do a "merge",
and one more in the outskirts would tend to do more of a "pull",
expecting his work to then be merged back to the "trunk" at some later
- it will result in _psychological_ damage, in the sense that there's
always one group that is the "trunk" group, and while you can pass the
baton around (like the perl people do), it's always clear who sits
Maybe this is fine. It's certainly how most projects tend to work.
I'll just point out that one of my design goals for git was to make every
single repository 100% equal. That means that there MUST NOT be a "trunk",
or a special line of development. There is no "vendor branch". It's
something that a lot of people on the git lists understand now, but it
took a while for it to sink in - people used to believe that the "first
parent" of a merge was somehow special, and I had to point out several
times on the git list that no, that's not how it works - because the merge
might have been done by somebody _else_ than the person who you think of
as being "on the trunk".
So when I say that your "simple" revision numbers are totally broken and
horrible, I say that not because I think a number like "184.108.40.206" is
ugly, but because I think that the deeper _implications_ of using a number
like that is ugly. It implies one of two things:
- the numbers change all the time as things get merged both ways
- people try to maintain a "trunk" mentality
and I think both of those situations are simply not good situations.
In git, the fact that everybody is on an equal footing is something that I
think is really good. For example, when I was away for effectively three
weeks during August, all the git-level merging for the kernel was done by
And realize that he didn't use "my tree". No baton was passed. I emailed
with him (and some others) before-hand, so that everybody knew that I
expected to be just pull from Greg when I came back, but it was _his_ tree
that he merged in, and he just worked the same way I did.
And when I did come back, I did a "pull" from his tree. At no point is
there a big merge-commit with a sign saying
"I now merged all the work that Greg did while I was away"
No. Because the way git works, my pull just fast-forwarded my tree,
because while I was away, Greg's tree _was_ the main tree, thanks to the
fact that git believes that everybody is 100% equal.
So it's actually a big conceptual thing.
I'm actually very happy with the design of git, and a large part of that
is that I think the data structures and the basic design was really good.
Now, I know I'm smarter than anybody else ("Bow down before me, you
worthless scum"), but the thing is, the way to do good basic design isn't
actually to be really smart about it, but to try to have a few basic
And the "every repository is equal" is one such concept. The naming
follows from that - you simply _cannot_ use numbers if everybody is on the
same footing (at least not _stable_ numbers).
Btw, BK did get this right. I didn't _like_ the naming in BK, and it was
numbers, but it worked. But it only worked when people understood that the
numbers were ephemeral, and it _did_ cause confusion. But hey, the
confusion wasn't _that_ big of a problem.
> Even if I agreed that the revision was meaningless, the cost of such a
> revision is miniscule.
No. The _cost_ of the revision is the "trunk mentality". THAT is the true
cost. The belief that there is one "main line of development".
More information about the bazaar