On Tue, Jan 11, 2011 at 10:22:29PM +0000, Tony Sales wrote: > The bug is that if you happen to create a new remote branch which > shares it's name with an existing directory in the top level of the > git repository, git then seems to get confused and the: git checkout > <branch> - command doesn't switch to that branch or turn tracking on > (and seems to think it was created from origin/<branch> rather than > from refs/remotes/origin/<branch>), which it does if the branch > doesn't share a name with an existing top level directory. This can be > rectified by running: git checkout --track -b debian origin/debian I don't think this is a bug so much as a confusing application of too much DWIMmery in git-checkout. "git checkout foo" can mean several things: 1. If it's a branch name, then switch to that branch. 2. Otherwise, if it's a tag name, switch to a detached HEAD at that tag. 3. Otherwise, if it's a file known to git, then checkout its content in the index into the working tree. 4. Otherwise, if there is a remote branch that matches refs/remotes/*/foo, create a new branch "foo" that tracks it. So the problem is that you expect behavior (4), but behavior (3) is getting in the way. I assume it was written this way because (4) came much later, and therefore came last so as not to break existing behavior for the other cases. Conceptually, though, I think it makes more sense for it to come (3) (i.e., to keep all of the "checking out a ref" behavior together). And one can disambiguate the path-mode already by doing: git checkout -- debian -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html