Re: [PATCH] pull: refuse complete src:dst fetchspec arguments
- From
Daniel Barkalow <barkalow@iabervon.org>
- Date
- Oct 21, 2009, 00:15 UTC
- Message-ID
- <alpine.LNX.2.00.0910202001050.14365@iabervon.org>
- In-Reply-To
- <BLU0-SMTP97AA2287062D9A104101C8AEC00@phx.gbl>
On Tue, 20 Oct 2009, Sean Estabrooks wrote:
Show 25 quoted lines
> On Tue, 20 Oct 2009 20:23:06 +0200 > Thomas Rast <trast@student.ethz.ch> wrote: > > Hi Thomas, > > > git-pull has historically accepted full fetchspecs, meaning that you > > could do > > > > git pull $repo A:B > > > > which would simultaneously fetch the remote branch A into the local > > branch B and merge B into HEAD. This got especially confusing if B > > was checked out. New users variously mistook pull for fetch or read > > that command as "merge the remote A into my B", neither of which is > > correct. > > > > Since the above usage should be very rare and can be done with > > separate calls to fetch and merge, we just disallow full fetchspecs in > > git-pull. > > It is however a handy shortcut to be able to specify the full refspec > and specify where you want the head stored locally. It seems a shame to > throw away that functionality because of one confusing case. Wouldn't > it be better to test of the confusing case and instead error out if the > local refname is already checked out?
Surely, "where you want the head stored locally" is somewhere that's information about a remote repository, and therefore under "refs/remotes/" (or "refs/tags/" or something) and therefore not possible to be checked out (in the "HEAD is a symref to it" sense).
I don't think it should be possible to fast-forward or create a local branch from a remote branch while simultaneously merging it into the currently-checked-out local branch.
Actually, I think it would be good to prohibit fetching into a new or existing local branch, whether or not it is checked out. We'd probably need to provide a plumbing method of doing a fetch, though, for script environments that aren't using the normal porcelain meanings of refs/ subdirectories. (Defining a bare repo with --mirror as not having local branches, of course)
-Daniel *This .sig left intentionally blank*