Re: [SOLVED] `git fetch tag NAME' into mirror repo does not update HEAD, what to do?
On Thursday 12 August 2010 14:32:41 Tomas Carnecky wrote:
Show 11 quoted lines
> On 8/12/10 2:16 PM, Brian Foster wrote:
> >[ ... ] This _does_ work:
> >
> > git reset --soft FETCH_HEAD
> >[ ... ]
> > Given that git-reset(1)'s purpose is to change the branch's
> > head (or to change HEAD as I've been incorrectly describing
> > it), that does make sense.
>
> I expected git checkout to work even in a bare repo - as you can
> see I don't work that often inside bare repos :).
<<<giggles>>> No problem! (I don't either, this situation was
unexpected, but as SLAVE lagging behind ORIG is anticipated as
being the usual case, we need to understand it.)
> You should use update-ref instead of reset. The problem with reset is
> that it changes the branch and not HEAD. Say initially your mirror had
> HEAD as symref pointing to refs/heads/master.
> When you run reset --soft
> v2 your master branch will now point to the same commit as the tag v2
> (and HEAD will be still pointing to refs/heads/master).
Correct, that is what happens. It also looks Ok to me,
nor have any tests hit any snags. It also happens to
match how we (eventually) manually repaired SLAVE.
> When you use
> 'git update-ref --no-deref HEAD v2' it will modify HEAD
NO, it gets an error (following is from a modified version
of my previously-posted script):
────────────────────────────────────────────────────────
...
+ cd ../SLAVE.git
+ git fetch --verbose origin tag v2
...
From /work/tmp/git/ORIG
* [new tag] v2 -> v2
+ git update-ref --no-deref HEAD v2
error: Trying to write non-commit object 2bc324e6a68cb3704448c9f63ddc3bc0260c0b48 to branch HEAD
fatal: Cannot update the ref 'HEAD'.
$
────────────────────────────────────────────────────────
Using ‘git update-ref --no-deref HEAD FETCH_HEAD’ does
not error, and, as you say (below), does seem to give
me a detached head.
> 'git update-ref --no-deref HEAD v2' it will modify HEAD directly and
> have it point directly to the same commit as v2 (also called detached HEAD).
I do_not_ want a detached head! This has perhaps been
confused by my improperly saying “update HEAD” when I
meant “update the master branch”. If you look back at
my originally-posted diagrams, it's a reasonable guess
I don't want a detached head. Having HEAD continue to
be a symref to refs/heads/master (which, in this case,
is the same commit as v2) is correct.
Thanks for your help, advice, and hints.
cheers!
-blf-