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

Re: [PATCH] remote: make prune work for mixed mirror/non-mirror repos

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 20, 2013, 23:30 UTC
Message-ID
<7vhagspdfx.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1371769636.17896.44.camel@localhost>
Dennis Kaarsemaker <dennis@kaarsemaker.net> writes:
Show 16 quoted lines
>> Going back to your original example:
>> 
>>     [remote "origin"]
>>             url = git://github.com/git/git.git
>>             fetch = +refs/*:refs/*
>>             mirror = true
>>     [remote "peff"]
>>             url = git://github.com/peff/git.git
>>             fetch = +refs/heads/*:refs/remotes/peff/*
>> 
>> Wouldn't you obtain "refs/remotes/github/html" from your "origin"
>> via "git pull origin"?  What happens to your local copy of that ref,
>> when it goes away from the origin and then you try to "fetch --prune
>> origin" the next time with this patch (and without this patch)?
>
> git pull origin gives me refs/html in this case.
Maybe there is a miscommunication.
	$ git ls-remote git://github.com/git/git.git | grep remotes/
shows that that repository, your origin, has refs/remotes/github/html

And you have remote.origin.fetch = +refs/*:refs/* in your local repository. So that ref will come to your local repository under the same name, i.e. refs/remotes/github/html, no? Not as refs/html.

So this answer
Show 7 quoted lines
>> What if you had this instead of the above version of remote.peff.*?
>> 
>>     [remote "peff"]
>>             url = git://github.com/peff/git.git
>>             fetch = +refs/heads/*:refs/remotes/github/*
>
> That doesn't change anything.

cannot be correct. You fetch from your origin and then its refs/remotes/github/html *will* want to come to your local repository and be stored there. If Peff has html branch in that hypothetical configuration, you fetch from him and his html branch (i.e. refs/heads/html from his point of view) will want to replace your local refs/remotes/github/html. Or Peff may not have html branch. The point is that you cannot tell by only looking at your local ref namespace and what "origin" has.

> Yeah, I'm starting to think this is not such a good idea. How about plan
> B: issuing a warning when adding a remote with a refspec that also
> matches another remote's refspec?
Surely that will make things safer.
> Or plan C: add a per-remote pruneIgnore setting that in this case I
> could set to refs/tags/* refs/remotes/* as I know it's correct? Could
> even be combined with plan B.

As I already said "I dunno", I am not sure if it is worth the effort to support overlapping RHSs of fetch refspecs, so between B and C, I would vote for B.

Previous: Dennis KaarsemakerNext: Dennis Kaarsemaker
Message 5 of 23 in “[BUG?] remote prune origin interacts badly with clone --mirror and multiple remotes”
  1. Dennis KaarsemakerJun 20, 2013
  2. remote: make prune work for mixed mirror/non-mirror reposDennis Kaarsemaker, Jun 20, 2013
  3. Junio C HamanoJun 20, 2013
  4. Dennis KaarsemakerJun 20, 2013
  5. Junio C HamanoJun 20, 2013
  6. Dennis KaarsemakerJun 20, 2013
  7. Junio C HamanoJun 20, 2013
  8. Jeff KingJun 20, 2013
  9. Dennis KaarsemakerJun 20, 2013
  10. Junio C HamanoJun 20, 2013
  11. remote: make prune work for mixed mirror/non-mirror reposDennis Kaarsemaker, Jun 20, 2013
  12. 0/3 Handling overlapping refspecs slightly smarterDennis Kaarsemaker, Jun 21, 2013
  13. 1/3 remote: Add warnings about mixin --mirror and other remotesDennis Kaarsemaker, Jun 21, 2013
  14. Junio C HamanoJun 21, 2013
  15. Dennis KaarsemakerJun 23, 2013
  16. Junio C HamanoJun 23, 2013
  17. Dennis KaarsemakerJun 23, 2013
  18. Junio C HamanoJun 23, 2013
  19. Dennis KaarsemakerJun 26, 2013
  20. Junio C HamanoJun 26, 2013
  21. 2/3 remote: Add test for prune and mixed --mirror and normal remotesDennis Kaarsemaker, Jun 21, 2013
  22. 3/3 remote: don't prune when detecting overlapping refspecsDennis Kaarsemaker, Jun 21, 2013
  23. Junio C HamanoJun 21, 2013

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.