Re: antisocial things you can do in git (but not CVS) - Mailing list pgsql-hackers

From Magnus Hagander
Subject Re: antisocial things you can do in git (but not CVS)
Date
Msg-id AANLkTikp1V4LmZZKbfeK8pNcWzsNMcI3tFGFYWEuwwje@mail.gmail.com
Whole thread Raw
In response to antisocial things you can do in git (but not CVS)  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: antisocial things you can do in git (but not CVS)
List pgsql-hackers
On Tue, Jul 20, 2010 at 20:34, Robert Haas <robertmhaas@gmail.com> wrote:
> I have some concerns related to the upcoming conversion to git and how
> we're going to avoid having things get messy as people start using the
> new repository.  git has a lot more flexibility and power than CVS,
> and I'm worried that it would be easy, even accidentally, to screw up
> our history.
>
> 1. Inability to cleanly and easily (and programatically) identify who
> committed what.  With CVS, the author of a revision is the person who
> committed it, period.  With git, the author string can be set to
> anything the person typing 'git commit' feels like.  I think there is
> also a committer field, but that doesn't always appear and I'm not
> clear on how it works.  Also, the author field defaults to something
> dumb if you don't explicitly set it to a value.  So I'm worried we
> could end up with stuff like this in the repository:

I'm pretty sure we can enforce this on the server side, refusing
commits that don't follow our standard. I haven't done it myself
(yet), but I've read about it.


> My preference would be to stick to a style where we identify the
> committer using the author tag and note the patch author, reviewers,
> whether the committer made changes, etc. in the commit message.  A
> single author field doesn't feel like enough for our workflow, and
> having a mix of authors and committers in the author field seems like
> a mess.

+1.


> 2. Branch and tag management.  In CVS, there are branches and tags in
> only one place: on the server.  In git, you can have local branches
> and tags and remote branches and tags, and you can pull and push tags
> between servers.  If I'm working on a git repository that has branches
> master, REL9_0_STABLE .. REL7_4_STABLE, inner_join_removal,
> numeric_2b, and temprelnames, I want to make sure that I don't
> accidentally push the last three of those to the authoritative
> server... but I do want to push all the others.  Similarly I want to
> push only the corrects subset of tags (though that should be less of
> an issue, at least for me, as I don't usually create local tags).  I'm
> not sure how to set this up, though.

We could put a safeguard in place on the server that won't let you
push a branch and require that additions of new branches be done
manually on the server?


> 3. Merge commits.  I believe that we have consensus that commits
> should always be done as a "squash", so that the history of all of our
> branches is linear.  But it seems to me that someone could
> accidentally push a merge commit, either because they forgot to squash
> locally, or because of a conflict between their local git repo's
> master branch and origin/master.  Can we forbid this?

Again, I haven't done it, but I've read about it, and I'm almost
certain we can enforce this, yes.


> 4. History rewriting.  Under what circumstances, if any, are we OK
> with rebasing the master?  For example, if we decide not to have merge
> commits, and somebody does a merge commit anyway, are we going to
> rebase to get rid of it?

That's something we need a good policy for. Merge commits are special.
For content commits, I think we should basically *never* do that. If
someone commits bad content, we should just make a revert commit which
keeps history linear and just removes the changes as a new commit.


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Some git conversion issues
Next
From: Magnus Hagander
Date:
Subject: Re: Some git conversion issues