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

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

From
JHJan Hudec <bulb@ucw.cz>
Date
May 25, 2007, 20:15 UTC
Message-ID
<20070525201524.GA4493@efreet.light.src>
In-Reply-To
<20070524154833.GL5412@admingilde.org>
On Thu, May 24, 2007 at 17:48:33 +0200, Martin Waitz wrote:
Show 26 quoted lines
> On Tue, May 22, 2007 at 09:37:06PM +0200, Jan Hudec wrote:
> > > We don't have to move the entire subproject.git into the superproject,
> > > but we need to have all _referenced_ objects in the .git dir of the
> > > superproject.
> > > 
> > > There are several possibilities to do so:
> > > 
> > >  * move the entire .git dir
> > >  * move .git/objects
> > >  * explicitly copy all referenced objects
> > 
> > I believe we really need entire .git dir. When the superporject checks out
> > revision which does not reference that subproject, we still need to preserve
> > not only the objects of subproject, but also the refs and config.
> 
> but all the other refs do not belong to the superproject.
> For those who are working on the subproject there are of course a lot
> of refs which they have to work with, but that can be dealt with
> outside of the superproject scope.  The subproject is still a normal
> Git repository, after all.
> That is, you can have remote entries, branches and what not.
> But all that is not interesting in the superproject scope.
> 
> So I thing moving the entire subproject.git into the superproject.git is too
> much.  The superproject is only interested in the objects and in one
> ref -- the one stored inside its tree.

No, the way I mean it the subproject and superproject don't share a single bit. The subproject.git dir is subdirectory of superproject.git, but has no thing in common with it.

> > > I have some experimental code to configure a per-subproject directory
> > > in the superproject/.git as alternate object store for the submodule
> > > to make the last two solutions possible.  Perhaps I should dig it out again
> > > and adapt it to current git.

Ah. My bad. Didn't notice this. I do NOT want to share any objects between subproject and superproject. At least not unless the user explicitely asks for that, which might make sense if the subproject was carved out of the superproject.

Show 23 quoted lines
> > > If there is a 1:1 relationship between subproject and object store then
> > > even efficient fsck and repack/prune are possible for the submodule without
> > > loosing objects.
> > > But such a 1:1 relationship is bad when you move subprojects to another
> > > location (or include the same subproject several times in different
> > > locations of the tree).
> > > Perhaps the user should be able to choose which one he wants.
> > 
> > That's why there should be the extra level of indirection using .gitmodules.
> > It should map the directory name to the object store name, so you can
> > relocate the subproject.
> > 
> > Including the same project several times is indeed interesting. Maybe the
> > subprojects should be "light checkouts" (I believe something like this was
> > already discussed on the list sometime). Those would be .git dirs, that would
> > only have HEAD and pointer to another .git dir with everything else.
> 
> Well, even if they might share a lot of objects they might be included
> for completely different reasons and so might need to work with
> different communities (remote entries, branches, etc.).
> 
> So sharing objects makes sense, sharing the rest of .git is not
> neccessary.
No, I didn't mean the subproject and superproject would share anything.
The case I talk about is if project foo has subdirs A and B and they both
contain (different revisions of) the same subproject. The .gitmodules
definition is:
    [submodule "A"]
    name=bar
    [submodule "B"]
    name=bar

In such case A/.git and B/.git can't both be symlinks to .git/subprojects/bar.git, because they have different HEAD, but everything else should be defined by .git/subprojects/bar.git

Show 17 quoted lines
> > > I think it will be _very_ common to store super and subprojects in
> > > related locations.  First to be independent from third-party servers
> > > while working on the superproject.
> > > Second (and I think more important) because many times there will
> > > be superproject related adaptations in the subproject.  Yes they
> > > are independent, and exactly for that reason the subproject upstream
> > > maintainers may not take every change which is needed to satisfy the
> > > superproject.  We _now_ see that in all Linux distributions already.
> > > So when you use superprojects to integrate several independent projects,
> > > then the superproject maintainer/administrator should really keep a
> > > clone of all subprojects handy on his site.
> > 
> > Yes, repositories with distribution-specific patches will add a large class
> > of cases requiring multiple sources support.
> 
> You don't really need multiple sources for it.
> The subproject contains both upstream and local changes, but I think
Upstream + local is not the interesting case. Multiple upstreams is.
Show 9 quoted lines
> it makes sense to keep the entire object store local (the same way
> to keep all the entire history local even if you only want to add to it
> in a normal repository).  Those people who work on the subproject and
> communicate with its upstream developers of course need remote entries
> and have to synchronize the subproject with upstream.  But that is
> not related to the superproject at all.
> 
> So yes, you have different sources but you don't need extra support
> in the subproject implementation for it.

Well, if the subproject is not auto-fetched, there's no need for extra support. But if there is auto-fetch, it should be aware of possibility to have multiple upstreams.

-- 
						 Jan 'Bulb' Hudec <bulb@ucw.cz>
Previous: Jakub NarebskiNext: Junio C Hamano
Message 29 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.