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

Re: [PATCH 0/7] Make "$remote/$branch" work with unconventional refspecs

From
Junio C Hamano <gitster@pobox.com>
Date
May 6, 2013, 17:06 UTC
Message-ID
<7vhaigrqay.fsf@alter.siamese.dyndns.org>
In-Reply-To
<CALKQrgf6NcT2tEGMTczxR2WspOi4NjrN_kxmKN-QyE2Py3iSaQ@mail.gmail.com>
Johan Herland <johan@herland.net> writes:
> Let me try to summarize my views on how refnames should work in Git, to
> see if we can identify where we differ on the principles (or if we, in
> fact, differ at all):

Thanks; I think I already said where I think we differ in a separate message, but a short version is that the point of remote.$nick.fetch mapping is to solve "The remote may call a ref $this, which is not the refname I want to or can use in my repository, so here is the rule to use when importing it in my local namespace. With the mapping, I can name the ref in my local namespace conveniently." E.g. their "refs/heads/master" cannot be our "refs/heads/master" at the same time, so use "refs/heads/origin/master".

The result of the above mapping, be it remotes/origin/master or remotes/origin/heads/master, should be designed to be useful for the local use of the ref in question. If you further need to remap it when using it locally, there is something wrong in the mapping you defined in your remote.$nick.fetch mapping in the first place.

We do not force any structure under refs/remotes/; it is left entirely up to the user, even though we would like to suggest the best current practice by teaching "clone" and "remote add" to lay them out in a certain way.

Another thing is that refs/remotes/ is not special at all. If notes hierarchies taken from a remote need to be somewhere other than refs/notes/, it is perfectly fine to introduce refs/remote-notes/ if that is the best layout when using them locally. What is special is refs/heads/ in that they are the _only_ refs you can check out to the working tree and directly advance them by working on the working tree files.

> I would support disallowing multi-level remote names, although I don't
> know if it is commonly used, and would break many existing users.
I somewhat doubt it.

We very much anticipated the use of multi-level branch names from the very beginning and have support (e.g. in "for-each-ref" and "branch --list") to group/filter them according to prefixes, but I do not think there is anywhere we consciously try to give support for multi-level remote names to treat groups of remotes that share the same prefix.

Show 20 quoted lines
>> *2* Perhaps "bar" in the above is spelled "topics", and the
>>     hierarchy may be used to collect non-integration single topic
>>     branches from more than one remote.  An example that is more in
>>     line with such a usage might be:
>>
>>     [remote "jh"]
>>         fetch = +refs/heads/*:refs/remotes/topics/heads/jh/*
>>     [remote "jk"]
>>         fetch = +refs/heads/*:refs/remotes/topics/heads/jk/*
>>     [remote "fc"]
>>         fetch = +refs/heads/*:refs/remotes/topics/heads/fc/*
>>
>>     and I would expect "git merge topics/jh/rbranch" to merge the
>>     "refs/remotes/topics/heads/jh/rbranch" topic branch.
>
> I like the use case, but not necessarily your expectation. ;-)
>
> With the above configuration, and my series as-is, you could simply do
> "git merge jh/rbranch" to merge the "refs/remotes/topics/heads/jh/rbranch"
> topic branch.

That dropping of 'topics/' is the issue. The user wanted to group them under 'topics/' hierarchy and made a conscous effort to set up the fetch refspec to map these refs there. These are done all for convenience when she deals with refs in her namespace in the repository. What justification do we have to second guess the user and force her to drop it when naming these refs?

> Furthermore, I don't see why you want/need the extra
> "heads/" level in the refspec.

Just like you wanted to have separate kinds of refs under a single remote, the layout is grouping kinds of refs other than branch heads related to the "topics" (as opposed to "integration branches").

Previous: Santi BéjarNext: Junio C Hamano
Message 36 of 39 in “Make "$remote/$branch" work with unconventional refspecs”
  1. 0/7 Make "$remote/$branch" work with unconventional refspecsJohan Herland, May 4, 2013
  2. 1/7 shorten_unambiguous_ref(): Allow shortening refs/remotes/origin/HEAD to originJohan Herland, May 4, 2013
  3. Bert WesargMay 5, 2013
  4. Junio C HamanoMay 6, 2013
  5. Johan HerlandMay 7, 2013
  6. 1/3 t1514: Add tests of shortening refnames in strict/loose modeJohan Herland, May 7, 2013
  7. 2/3 t1514: Demonstrate failure to correctly shorten "refs/remotes/origin/HEAD"Johan Herland, May 7, 2013
  8. 3/3 shorten_unambiguous_ref(): Fix shortening refs/remotes/origin/HEAD to originJohan Herland, May 7, 2013
  9. Junio C HamanoMay 7, 2013
  10. Junio C HamanoMay 7, 2013
  11. Johan HerlandMay 7, 2013
  12. Junio C HamanoMay 7, 2013
  13. Johan HerlandMay 7, 2013
  14. 2/7 t7900: Start testing usability of namespaced remote refsJohan Herland, May 4, 2013
  15. Junio C HamanoMay 7, 2013
  16. Johan HerlandMay 7, 2013
  17. Junio C HamanoMay 7, 2013
  18. 3/7 t7900: Demonstrate failure to expand "$remote/$branch" according to refspecsJohan Herland, May 4, 2013
  19. Junio C HamanoMay 7, 2013
  20. 4/7 refs.c: Refactor rules for expanding shorthand names into full refnamesJohan Herland, May 4, 2013
  21. Junio C HamanoMay 7, 2013
  22. 5/7 refs.c: Refactor code for shortening full refnames into shorthand namesJohan Herland, May 4, 2013
  23. Junio C HamanoMay 7, 2013
  24. 6/7 refname_match(): Caller must declare if we're matching local or remote refsJohan Herland, May 4, 2013
  25. Junio C HamanoMay 7, 2013
  26. 7/7 refs.c: Add rules for resolving refs using remote refspecsJohan Herland, May 4, 2013
  27. Junio C HamanoMay 5, 2013
  28. Johan HerlandMay 5, 2013
  29. Junio C HamanoMay 5, 2013
  30. Johan HerlandMay 5, 2013
  31. Junio C HamanoMay 5, 2013
  32. Santi BéjarMay 6, 2013
  33. Santi BéjarMay 6, 2013
  34. Junio C HamanoMay 6, 2013
  35. Santi BéjarMay 6, 2013
  36. Junio C HamanoMay 6, 2013
  37. Junio C HamanoMay 6, 2013
  38. Johan HerlandMay 6, 2013
  39. Junio C HamanoMay 7, 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.