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

Re: [PATCH 07/16] git-read-tree: take --submodules option

From
Junio C Hamano <junkio@cox.net>
Date
May 24, 2007, 20:32 UTC
Message-ID
<7vy7jeufmn.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20070524191438.GZ942MdfPADPa@greensroom.kotnet.org>
Sven Verdoolaege <skimo@kotnet.org> writes:

[side note: I am ignoring your reply-to: liacs.nl as its MTA seems to use sorbs that has my ISP's outgoing sender identified as spam source; I'll send the bounce to you privately in a separate message.]

Show 21 quoted lines
> On Thu, May 24, 2007 at 11:58:26AM -0700, Junio C Hamano wrote:
>> Sven Verdoolaege <skimo@kotnet.org> writes:
>> > On Thu, May 24, 2007 at 11:26:01AM -0700, Junio C Hamano wrote:
>> >>  (2) In superproject .git/, we would have a bare repository for
>> >>      each project used by the superproject.
>> >> 
>> >> 	.git/subproject/kernel26/{objects,refs,...}
>> >> 
>> >>      This is created by making a bare clone from the upstream
>> >>      URL, decided by the user with the help from suggested URL
>> >>      described in the superproject .gitmodules.
>> >
>> > Do you mean a "pure" clone, i.e., without a working tree,
>> > but with separate-remotes?
>> 
>> I meant a bare clone without separate remotes.
>
> Why without separate remotes?
> It has been argued before that changes in the subproject
> may come from different remotes, so the user may want
> to configure extra remotes from which to fetch.
By different remotes, which do you mean?
 (1) .git/subprojects/kernel26/ repository has 'origin'
     different from any of the suggested URL in .gitmodules, but
     as far as it is concerned there is one 'origin';
or
 (2) it has 'origin' that is what the superproject suggests, but
     the user locally uses additional repositories to pull and
     merge from;

If the former that is not an argument, so I'd assume the latter. I would say in such a case, you are better off having a usual repository to manage the development of subproject part, not grafted to any superproject repository, and handle such merges there (after all, a "subproject" should stand on its own without having any of the superproject stuff). And treat THAT repository as the 'origin' used in (1) above. It might be easier to use non separate-remote layout in the standalone repository for the subproject, but that is a separate issue.

Show 8 quoted lines
>> The counter-proposal outline essentially says, for the sake of
>> simplicity, "nuke existing subproject directory whenever we need
>> to replace it with something else, and reclone a new/replacement
>> subproject directory every time we need to check it out, after
>> making sure nothing is lost".
>
> And she can't do it in the clone in his working tree if that's
> going to get nuked from time to time.

And she does not have to. She can do the development/fixes in (temporarily) checked out subproject tree, and push it back to the .git/subproject/kernel26/ repository in the superproject before she leaves (i.e. before branch switching at superproject level needs to obliterate it). The change stored in the .git/subproject/kernel26/ repository in the superproject can further be pushed back to its 'origin', be it the true "upstream", or "the standalone repository for the subproject" I mentioned above.

> But you still need figure out _what_ to fetch.
> Before you suggested to just use the default set up by
> clone with separate remotes, but you no longer have that
> in your new proposal.

I do remember saying the "default set up by clone" but I did not mean separate remotes.

What is fetched by a bare and non-separate-remote repository vs a repository that uses separate-remote layout from 'origin' is exactly the same -- the difference is only 'pure/bare' layout would use

	fetch = refs/heads/*:refs/heads/*
while separate-remotes would use
	fetch = refs/heads/*:/refs/remotes/origin/*

So I do not think the difference matters for our purpose of being able to check out commits that are referenced in superproject trees. As long as we require that the 'origin' for "longer term repository to keep track of the subproject in superproject" (aka repository (2) in my message you are responding to) always contain the commit referenced by tree objects in the superproject, which I think is a sensible thing to require (otherwise you cannot even clone and checkout the whole superproject), both layout would work equally well. It's just bare/pure layout is easier to understand because it is essentially a "mirror" of the upstream.

Previous: Sven VerdoolaegeNext: Petr Baudis
Message 34 of 63 in “Second round of support for cloning submodules”
  1. skimo@liacs.nlMay 18, 2007
  2. 01/16 Add dump-configskimo@liacs.nl, May 18, 2007
  3. 02/16 git-config: add --remote option for reading config from remote reposkimo@liacs.nl, May 18, 2007
  4. 03/16 http.h: make fill_active_slots a function pointerskimo@liacs.nl, May 18, 2007
  5. 04/16 git-config: read remote config files over HTTPskimo@liacs.nl, May 18, 2007
  6. 05/16 unpack-trees.c: verify_uptodate: remove dead codeskimo@liacs.nl, May 18, 2007
  7. Junio C HamanoMay 18, 2007
  8. 06/16 unpack-trees.c: pass cache_entry * to verify_absent rather than just the nameskimo@liacs.nl, May 18, 2007
  9. 07/16 git-read-tree: take --submodules optionskimo@liacs.nl, May 18, 2007
  10. Alex RiesenMay 18, 2007
  11. Sven VerdoolaegeMay 18, 2007
  12. Alex RiesenMay 18, 2007
  13. Junio C HamanoMay 19, 2007
  14. Shawn O. PearceMay 19, 2007
  15. Alex RiesenMay 19, 2007
  16. Sven VerdoolaegeMay 19, 2007
  17. Junio C HamanoMay 19, 2007
  18. Jan HudecMay 20, 2007
  19. Junio C HamanoMay 20, 2007
  20. Sven VerdoolaegeMay 20, 2007
  21. Jan HudecMay 21, 2007
  22. Sven VerdoolaegeMay 21, 2007
  23. Junio C HamanoMay 21, 2007
  24. Jan HudecMay 21, 2007
  25. Martin WaitzMay 21, 2007
  26. Jan HudecMay 22, 2007
  27. Martin WaitzMay 24, 2007
  28. Jakub NarebskiMay 25, 2007
  29. Jan HudecMay 25, 2007
  30. Junio C HamanoMay 24, 2007
  31. Sven VerdoolaegeMay 24, 2007
  32. Junio C HamanoMay 24, 2007
  33. Sven VerdoolaegeMay 24, 2007
  34. Junio C HamanoMay 24, 2007
  35. Petr BaudisMay 24, 2007
  36. Junio C HamanoMay 24, 2007
  37. Junio C HamanoMay 24, 2007
  38. Petr BaudisMay 24, 2007
  39. Jan HudecMay 25, 2007
  40. Junio C HamanoMay 25, 2007
  41. Steven GrimmMay 25, 2007
  42. Junio C HamanoMay 25, 2007
  43. Petr BaudisMay 19, 2007
  44. 08/16 unpack-trees.c: assume submodules are cleanskimo@liacs.nl, May 18, 2007
  45. 09/16 entry.c: optionally checkout submodulesskimo@liacs.nl, May 18, 2007
  46. Alex RiesenMay 18, 2007
  47. Sven VerdoolaegeMay 18, 2007
  48. Alex RiesenMay 18, 2007
  49. Alex RiesenMay 18, 2007
  50. Add run_command_v_opt_cd: chdir into a directory before execAlex Riesen, May 18, 2007
  51. Use run_command_v_opt_cd when checking out a submoduleAlex Riesen, May 18, 2007
  52. 10/16 git-checkout: pass --submodules option to git-read-treeskimo@liacs.nl, May 18, 2007
  53. Petr BaudisMay 19, 2007
  54. 11/16 git-fetch: skip empty argumentsskimo@liacs.nl, May 18, 2007
  55. Junio C HamanoMay 18, 2007
  56. 12/16 builtin-fetch--tool: extend "native-store" for use in cloningskimo@liacs.nl, May 18, 2007
  57. Alex RiesenMay 18, 2007
  58. Sven VerdoolaegeMay 19, 2007
  59. 13/16 git-clone: rely on git-fetch for fetching for most protocolsskimo@liacs.nl, May 18, 2007
  60. 14/16 git-clone: rely on git-fetch for non-bare fetching over httpskimo@liacs.nl, May 18, 2007
  61. 15/16 git-read-tree: treat null commit as empty treeskimo@liacs.nl, May 18, 2007
  62. 16/16 git-clone: add --submodules for cloning submodulesskimo@liacs.nl, May 18, 2007
  63. Sven VerdoolaegeMay 18, 2007

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.