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

Re: [PATCH 0/4] Multiple worktrees vs. submodules fixes

From
Max Kirillov <max@max630.net>
Date
Oct 14, 2014, 22:15 UTC
Message-ID
<20141014221509.GA10580@wheezy.local>
In-Reply-To
<543D7EBA.4040206@web.de>
On Tue, Oct 14, 2014 at 09:51:22PM +0200, Jens Lehmann wrote:
Show 12 quoted lines
> Am 14.10.2014 um 20:34 schrieb Max Kirillov:
>> But here are a lot of nuances. For example, it makes
>> sense to have a superproject checkout without submodules
>> being initialized (so that they don't waste space and
>> machine time for working tree, which often is more than
>> repository data).
> 
> Hmm, I'm not sure if this is a problem. If the
> GIT_COMMON_DIR does have the submodule repo but it isn't
> initialized locally, we shouldn't have a problem (except
> for wasting some disk space if not a single checkout-to
> superproject initializes this submodule).

If initially a repository is clone without submodules, it will not have anything in the GIT_COMMON_DIR.

> And if GIT_COMMON_DIR does not have the submodule repo
> yet, wouldn't it be cloned the moment we init the
> submodule in the checkout-to? Or would that need extra
> functionality?

I cannot say I like this. Network operations should be caused only by clone and submodules.

I think the logic can be simple: it a submodule is not checked-out in the repository "checkout --to" is called from, then it is not checked-out to the new one also. If it is, then checkout calls itself recursively in the submodule and works like being run in standalone repository.

Show 9 quoted lines
>> Then, a checkout copy of a submodule can be standalone
>> (for example, git and git-html-docs are submodules of
>> msysgit). Or, it can even belong to some other
>> superproject. And in that cases they still should be able
>> to be linked.
> 
> Maybe such configurations would have to be handled
> manually to achieve maximum savings. At least I could live
> with that.

To make manual handling of the cases, and to skip checking-out a module.

I would think about the following interface:

$ git checkout --to ... - does not checkout submodules, creates empty directory.

$ git checkout --recursive --to ... - if a submodule is checked-out in source repository, recursed there and run "checkout --recursive" again. If a submodule is not checked-out, does not checkout it, creates an empty directory.

By the way, I have found your branch recursive_submodule_checkout. Would you like to revive it? Then it can be done with the same option.

Show 5 quoted lines
> Hmm, so I tend towards adding GIT_COMMON_DIR to
> local_repo_env until we figured out how to handle this.
> Without that I fear bad things will happen, at least for a
> superproject with multiple checkout-to work trees where
> the same submodule is initialized more than once ...

I learned about local_repo_env and agree it should include GIT_COMMON_DIR. Unless it is removed at all...

Previous: Jens LehmannNext: Duy Nguyen
Message 11 of 24 in “Multiple worktrees vs. submodules fixes”
  1. 0/4 Multiple worktrees vs. submodules fixesMax Kirillov, Oct 12, 2014
  2. 1/4 checkout: do not fail if target is an empty directoryMax Kirillov, Oct 12, 2014
  3. 2/4 submodule refactor: use git_path_submodule() in add_submodule_odb()Max Kirillov, Oct 12, 2014
  4. 3/4 git-common-dir: make "modules/" per-working-directory directoryMax Kirillov, Oct 12, 2014
  5. 4/4 path: implement common_dir handling in git_path_submodule()Max Kirillov, Oct 12, 2014
  6. Duy NguyenOct 14, 2014
  7. Jens LehmannOct 14, 2014
  8. Junio C HamanoOct 14, 2014
  9. Max KirillovOct 14, 2014
  10. Jens LehmannOct 14, 2014
  11. Max KirillovOct 14, 2014
  12. Duy NguyenOct 15, 2014
  13. Jens LehmannOct 15, 2014
  14. Max KirillovOct 16, 2014
  15. Jens LehmannOct 19, 2014
  16. Max KirillovOct 20, 2014
  17. Duy NguyenNov 3, 2014
  18. Jens LehmannNov 3, 2014
  19. Max KirillovNov 3, 2014
  20. Max KirillovOct 14, 2014
  21. Duy NguyenOct 15, 2014
  22. Junio C HamanoOct 15, 2014
  23. Duy NguyenOct 17, 2014
  24. Jens LehmannOct 19, 2014

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.