git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Problems with git fetch confusing foo and foo.git repos

From
RPRichard Purdie <richard.purdie@linuxfoundation.org>
Date
Aug 18, 2012, 14:49 UTC
Message-ID
<1345301383.27428.55.camel@ted>
In-Reply-To
<1345299904.27428.50.camel@ted>
On Sat, 2012-08-18 at 15:25 +0100, Richard Purdie wrote:
Show 40 quoted lines
> A while ago I reported a problem[1] where having:
> 
> /somewhere/foo
> and
> /somewhere/foo.git
> 
> as bare repositories and trying to clone them using alternates could
> cause git to confuse them.
> 
> The "conclusion" was that I needed to do:
> 
> git clone -s -n /somewhere/foo/ x
> 
> to stop it looking at the .git version. Ok, fine. Ugly but I can live
> with it and we added the workaround[2].
> 
> I've now discovered we only half solved the problem. Whilst the
> alternates might get setup correctly, the branch names and revisions get
> fetched from the .git version still.
> 
> It appears that even if you have a repository setup with an origin url
> of "/somewhere/foo/", when you run git fetch origin -f  refs/*:refs/*,
> it will look at foo.git if it exists.
> 
> The problem is the trailing slash is stripped off by the code in
> git-fetch itself. It appears to have done this since it was converted
> from a .sh function. It means it appears impossible to fetch the
> branchnames/revisions from foo when foo.git exists.
> 
> I work with build systems that build complete linux systems and we're
> running into failures caused by this. I really need pre-existing
> versions of git to work so I can't even patch git to work around the
> problem without significant cost. So far the only way I've figured out
> to avoid this is to create a symlink to /somewhere/foo/ and then set url
> to point at the symlink. This way I can prevent it from finding the
> other directory.
> 
> I thought I'd mention this in the hopes git can be fixed to behave
> better in this situation and perhaps I can drop the hacks I'm going to
> have to add sometime in the future.

I'd add that I think the commit made for the original problem[1] has fixed this scenario since it now will prefer foo over foo.git also in the fetch case even if the / is removed from the url. My test machines don't have that version yet though and I'm left with a problem where git is older than 1.7.9.2.

[1]http://git.kernel.org/?p=git/git.git;a=commit;h=b3256eb8b35937192e85725d0c2bcb422295790c
Cheers,
Richard
Previous: Richard PurdieNext: Junio C Hamano
Message 2 of 4 in “Problems with git fetch confusing foo and foo.git repos”
  1. Richard PurdieAug 18, 2012
  2. Richard PurdieAug 18, 2012
  3. Junio C HamanoAug 18, 2012
  4. Richard PurdieAug 18, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.