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
Jeff King <peff@peff.net>
Date
Jun 20, 2013, 23:08 UTC
Message-ID
<20130620230843.GA5780@sigill.intra.peff.net>
In-Reply-To
<7vppvgpfib.fsf@alter.siamese.dyndns.org>
On Thu, Jun 20, 2013 at 03:46:20PM -0700, Junio C Hamano wrote:
Show 9 quoted lines
> Dennis Kaarsemaker <dennis@kaarsemaker.net> writes:
> 
> > When cloning a repo with --mirror, and adding more remotes later,
> > get_stale_heads for origin would mark all refs from other repos as stale. In
> > this situation, with refs-src and refs->dst both equal to refs/*, we should
> > ignore refs/remotes/* when looking for stale refs to prevent this from
> > happening.
> 
> I do not think it is a right solution to single out refs/remotes/*.
Yeah, I agree.
Show 9 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/*

There is a fundamental namespace conflict here: one remote is claiming the whole refs/* namespace, and another remote is claiming some subset. "fetch --prune" is only one type of problem you can have; you might also overwrite stuff from the "peff" remote with stuff from the "origin" remote (if it happens to have "refs/remotes/peff/foo" itself).

Show 7 quoted lines
> I think this is an unsolvable problem, and I _think_ the root cause
> of the issue is the configuration above that allows the RHS of
> different fetch refspecs to overlap.  refs/* is more generic and
> covers refs/remotes/peff/* and refs/remotes/github/*.  You cannot
> even know, just by looking at "origin" and your local repository,
> if refs/remotes/github/html you have should go away or it might have
> come from somewhere else.
Exactly.
Show 8 quoted lines
> The best we _could_ do, without contacting all the defined remotes,
> is probably to check each ref that we did not see from "origin" (for
> example, you find "refs/remotes/peff/frotz" that your origin does
> not have) and see if it could match RHS of fetch refspec of somebody
> else (e.g. RHS of "refs/heads/*:refs/remotes/peff/*" matches that
> ref).  Then we can conclude that refs/remotes/peff/frotz _might_
> have come from Peff's repository and not from "origin", and then we
> can optionally issue a warning and refrain from removing it.

I think this is just papering over the problem in one instance. What happens when you _do_ have overlapping refs in the "origin" remote, and you have a true conflict.

I wonder why Dennis wants to "refs/*:refs/*" in the first place. It is not usually a useful thing to have in a non-bare repository, because fetches will overwrite local work on branches. If he just wanted the automatic "git push --mirror" setting, that does not depend on the fetch refspec.

We made this distinction in "git remote --mirror={fetch,remote}", but I don't think "git clone --mirror" ever learned about it.

-Peff
Previous: Junio C HamanoNext: Dennis Kaarsemaker
Message 8 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.