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, 19:43 UTC
Message-ID
<7vk5uyvwgi.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7viraixeme.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:

Sorry, I hate to send "amend" message like this, but there are some places I was not clear enough...

Show 10 quoted lines
> How about doing something like this, instead?
>
>  (1) superproject .gitmodules (in-tree) and .git/config (local
>      repository) use the three-level naming in $gmane/47567.
>      Namely, (1a) .gitmodules says which subdirectory has a
>      checkout of what project, and names the project in
>      logical/abstract terms, not with a URL (e.g. "kernel26");
>      (1b) .gitmodules also associates a set of suggested URLs
>      for each of the logical/abstract project name; (1c)
>      .git/config records which project are of interest.

... are of interest, and perhaps which URL to use but that is not necessary, as we can record that in repositories we create in (2).

Show 8 quoted lines
>  (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.

This bare clone probably have its own config that records remote.origin.url, which would probably be the same as one of the URL suggested in .gitmodules for many people, but could be different. As to what should happen when the .gitmodules that comes from the upstream changes the set of suggested URLs recorded in there, see $gmane/47621,

Show 11 quoted lines
>      The idea is to use this repository as a long-term
>      subproject state across branch switching.
>
>  (3) When we need to check out a revision of superproject whose
>      .gitmodules has "kernel-src/ -> kernel26", and when we
>      haven't done so (perhaps we are doing an initial checkout,
>      perhaps we are switching from a different revision of the
>      superproject that did not have "kernel26" project at
>      kernel-src/ directory), we rm -f kernel-src/ and then
>      "git-clone -l -s" from the repository we keep in (2) to
>      populate kernel-src/ directory.
The last part of the above should have been:
       we "rm -fr kernel-src/" and then "git-clone -l -s -n"
       from the repository we keep in (2).  And then check out
       the commit that is pointed at by the superproject tree
       (rather, "index").
Show 10 quoted lines
>  (4) Before performing the above step (3), we need to make sure
>      we are not losing anything in kernel-src/ if exists.  Three
>      cases plus one:
>
>      (4a) The path kernel-src/ in the old checkout was not a
>      subproject (either it did not exist, it was a blob, or it
>      was a directory with files that are tracked as part of the
>      superproject).  The usual "don't lose local modification"
>      rule we use try to carry local changes forward across
>      branch switching, but in this case we shouldn't do so.
The last part of the above should have been:
       ... but in this case we shouldn't even try to carry local
       changes forward, as there is nowhere to carry them to.
       Instead we should error out and have the user clean-up
       the subproject repository (either "git reset", or "git
       commit && git push" to stash the change back to
       repository we prepared in (2)).  We might also want to
       allow the user to say "local changes in this subproject
       checkout does not matter" by saying "git checkout -f
       $commit" at the superproject level, but I think that is
       rather dangerous.
Show 15 quoted lines
>      (4b) It has the same logical/abstract project checked out;
> ...
>      (4c) It has a different project checked out; we need to be
>      careful to keep local changes, and also we need to make
>      sure the local changes in this subproject repository are
>      pushed back to (2).  It could be that automated "git push"
>      after making sure everything is committed is sufficient and
>      have the user handle failure cases.
>
>      (4d) This applies not just "before step (3)", but in cases
>      where we need to replace a checked out subproject directory
>      with something else (e.g. blob or directory that belong to
>      the superproject, or noneness).  We would need to make sure
>      no local change is lost, and the repository is synched up
>      with (2).
... which is the same check and action we would do in case (4c).
Previous: Junio C HamanoNext: Petr Baudis
Message 37 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.