VCS comparison table
Aaron Bentley
aaron.bentley at utoronto.ca
Tue Oct 17 05:24:15 BST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Linus Torvalds wrote:
>
> On Mon, 16 Oct 2006, Aaron Bentley wrote:
>> Bazaar's namespace is "simple" because all branches can be named by a
>> URL, and all revisions can be named by a URL + a number.
> I pretty much _guarantee_ that a "number" is not a valid way to uniquely
> name a revision in a distributed environment, though. I bet the "number"
> really only names a revision in one _single_ repository, right?
Right. That's why I said all revisions can be named by a URL + a
number, because it's the combination of the URL + a number that is
unique. (In bzr, each branch has a URL.)
> In contrast, in git, a revision is a revision is a revision.
I agree that a revision is a revision, but I don't think that's a
property unique to git. :-)
> If you give
> the SHA1 name, it's well-defined even between different repositories, and
> you can tell somebody that "revision XYZ is when the problem started", and
> they'll know _exactly_ which revision it is, even if they don't have your
> particular repository.
When two people have copies of the same revision, it's usually because
they are each pulling from a common branch, and so the revision in that
branch can be named. Bazaar does use unique ids internally, but it's
extremely rare that the user needs to use them.
> Now _that_ is true simplicity. It does automatically mean that the names
> are a bit longer, but in this case, "longer" really _does_ mean "simpler".
>
> If you want a short, human-readable name, you _tag_ it. It takes all of a
> hundredth of a second to to or so.
But tags have local meaning only, unless someone has access to your
repository, right?
>>> About "checkouts", i.e. working directories with repository elsewhere:
>>> you can use GIT_DIR environmental variable or "git --git-dir" option,
>>> or symlinks, and if Nguyen Thai Ngoc D proposal to have .gitdir/.git
>>> "symref"-like file to point to repository passes, we can use that.
>> It sounds like the .gitdir/.git proposal would give Git "checkouts", by
>> our meaning of the term.
>
> Well, in the git world, it's really just one shared repository that has
> separate branch-namespaces, and separate working trees (aka "checkouts").
> So yes, it probably matches what bazaar would call a checkout.
The key thing about a checkout is that it's stored in a different
location from its repository. This provides a few benefits:
- - you can publish a repository without publishing its working tree,
possibly using standard mirroring tools like rsync.
- - you can have working trees on local systems while having the
repository on a remote system. This makes it easy to work on one
logical branch from multiple locations, without getting out of sync.
- - you can use a checkout to maintain a local mirror of a read-only
branch (I do this with http://bazaar-vcs.com/bzr/bzr.dev).
> Almost nobody seems to actually use it that way in git - it's mostly more
> efficient to just have five different branches in the same working tree,
> and switch between them. When you switch between branches in git, git only
> rewrites the part of your working tree that actually changed, so switching
> is extremely efficient even with a large repo.
You can operate that way in bzr too, but I find it nicer to have one
checkout for each active branch, plus a checkout of bzr.dev. Our switch
command also rewrites only the changed part of the working tree.
Aaron
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFFNFrv0F+nu1YWqI0RAgBHAJ9XpmdvuCNDysxFhnyeCmkEG/z0ggCggMsJ
WyW6lqGMokh0k0It1KOdgtk=
=L1SR
-----END PGP SIGNATURE-----
More information about the bazaar
mailing list