Promoting the use of Mercurial; was: Re: gnome dvcs survey results
Theodore Tso
tytso at mit.edu
Sat Jan 10 04:43:26 UTC 2009
On Fri, Jan 09, 2009 at 04:37:08PM -0600, Matt Mackall wrote:
> The purpose of a version control system is to record history. If tags
> are mutable, then they must be part of history. Otherwise, you'll be
> unable to answer questions like 'when was this tag added? who changed
> this tag? and what was it before?'.
This assumes that tag _are_ history. Another way to think about
things is to say that tags are a *pointer* to history. Some
historiams claim September 4, 476 as the fall of the Roman Empire;
others use 378 A.D., still others 410 A.D., and others go as late as
565 A.D. *History* is immutable; what tags we place on history isn't
necessarily part of history.
> A decentralized tool has to assume everyone has equal privileges. This
> means everyone can add and modify tags in their own repos. It's also
> safe to assume that people will want other people's public tags. Ergo,
> there must be the same accountability for tags as there is for
> everything else. Which means the most reasonable thing to do is use the
> same mechanism.
>
> If your workflow is 'only Linus gets to add tags' and 'only Linus gets
> to push to the official repo' and you can trust everyone to stick to
> that then it's not much an issue. But for everyone else it is.
I like the model that says, if a tag is important, you PGP sign it,
and anyone can PGP sign tags --- so it's not reserved to Linus. Also,
if you have a tag in your repository, and you pull from another
repository that has that tag pointed to a different commit, the SCM
should throw warning message and refuse to update the tag. So users
have to take affirmative action in order to accept a changed tag into
their repository --- and given that tags rarely change, this is not a
big deal. Of course, this is the model that git uses, but regardless,
I think it's a very stright forward and easy-to-understnd model.
Regrds,
- Ted
More information about the Mercurial
mailing list