Subject: Re: git-checkout sometimes silently fails

From: Andrew Morton <[email-masked]>
Date: Tue, 6 May 2008 17:10:52 -0700

On Tue, 6 May 2008 23:50:49 +0200 Alex Riesen <[email-masked]> wrote:

> Andrew Morton, Tue, May 06, 2008 21:22:56 +0200:
> > 
> > I've had this happen before and I don't know what to do to make it stop. 
> > Usually sufficient fiddling will prevent it from happening.
> > 
> > 
> > y:/usr/src/git26> cat .git/branches/linux-next 
> > git+ssh://master.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git
> > 
> > y:/usr/src/git26> git-checkout master
> > Switched to branch "master"
> > y:/usr/src/git26> cat kernel/*.c|sum
> > 34439  2057
> > y:/usr/src/git26> git-checkout linux-next
> > Switched to branch "linux-next"
> > y:/usr/src/git26> cat kernel/*.c|sum     
> > 34439  2057
> 
> This is not a good indication of a failed checkout (they could point
> to the same commit, for one).

How could they?  linux-next includes a directory called ./Next and a file
in that directory called ./Next/Trees, and that is not present after the
`git-checkout linux-next'.

> Try "gitk master...linux-next" (or "git
> log master..linux-next", "git diff master linux-next")

These come up empty.  But there is a 12.4MB diff between mainline and
linux-next.

> > y:/usr/src/git26> git-checkout origin 
> > Note: moving to "origin" which isn't a local branch
> > If you want to create a new branch from this checkout, you may do so
> > (now or later) by using -b with the checkout command again. Example:
> >   git checkout -b <new_branch_name>
> > HEAD is now at 5717922... Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb
> 
> This is not an error. The commit was checked out (and HEAD was
> "detached").
> 
> > y:/usr/src/git26> cat kernel/*.c|sum          
> > 34439  2057
> 
> Again, it is no indication nothing happened. "gitk HEAD...linux-next"
> 
> > y:/usr/src/git26> git --version
> > git version 1.5.5.rc1
> > 
> > help?
> 
> Look at "git branch -av" (it shows both local and remote branches and
> commits they point to).

y:/usr/src/git26> git-branch -av | grep '^\*'
* master               5717922 Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb
y:/usr/src/git26> git-checkout linux-next    
Switched to branch "linux-next"
y:/usr/src/git26> git-branch -av | grep '^\*'
* linux-next           5717922 Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb

y:/usr/src/git26> ls -l Next 
ls: cannot access Next: No such file or directory

> Maybe it will give you a hint. "gitk --all" is
> interesting too, seldom though (it becomes very confusing very fast if
> you have many branches with complicated history each).

hm, lots of stuff there.

Thing is, sometimes `git-checkout linux-next' works.  Sometimes it
inexplicably doesn't work and there is no indication from git that it
didn't work.

Usually my git problems are root-caused down to my lack of a PhD in
hermeneutic metaphysiology, but not this time, methinks