Subject: Re: Newbie grief

From: Rich Pixley <[email-masked]>
Date: Fri, 04 May 2012 14:29:28 -0700

On 5/4/12 1:45 PM, Felipe Contreras wrote:
> It doesn't matter how you look at it; 'push -f' is not ideal.

Push -f offers an alternative that is available in other source code 
control systems, (not just mercurial), but not in git.  It's a bit of a 
culture shock to discover that it's not available in git.

> In the git world there's many ways to resolve this; push to another
> branch, push to another repo, allow ssh access to your machine, send
> the changes by mail, copy the git repo to a shared location, etc.
> *All* of those alternatives are better than 'push -f'.

In your opinion, and that's fine.  I don't need to argue this point any 
longer.  All of those other solutions are also available in the other 
source code control systems too.

> It seems to me that this *huge* thread basically boils down to Rich
> wanting 'hg push -f', when clearly that just creates problems, even in
> mercurial.

Actually, I wanted a work flow that was functional for me and supported 
a shared branch between multiple repositories.  I think I have a process 
for that now.  The key things I've learned so far are:

* Git can't cope with repository collisions, (in essence, because it's 
not willing to ever create multiple heads, but also because it doesn't 
track the entire pedigree of a branch, and because destructive rewrites 
on the repository are common in typical git usage).

The usual way to deal with this in the git world is to use geographical 
branches and triangles everywhere, but using "merge before push" can 
provide a way to use shared branches within git, (provided you can live 
within a fair number of restrictions, which I probably can.)

* That that cryptic message means that git would need to cope with a 
repository collision, which it can't do.  It doesn't actually mean that 
the repository is corrupt, which is what I took it to mean.

Frankly, if the cryptic message had been clearer, I probably would never 
have posted here.  I'd likely have figured out that git had this 
restriction and found a way to work around it on my own.

--rich