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

Re: [PATCH/RFC v2] Squashed changes for multiple worktrees vs. submodules

From
Jens Lehmann <jens.lehmann@web.de>
Date
Dec 8, 2014, 20:40 UTC
Message-ID
<54860CDB.9090904@web.de>
In-Reply-To
<20141207064230.GA9782@wheezy.local>
Am 07.12.2014 um 07:42 schrieb Max Kirillov:
Show 15 quoted lines
> On Sat, Dec 06, 2014 at 02:06:08PM +0100, Jens Lehmann wrote:
>> Am 05.12.2014 um 07:32 schrieb Max Kirillov:
>>> Currently I'm estimating approach when submodules which have .git
>>> file or directory inside are updated, and those which do not have it are not.
>>> I have added a config variable submodule.updateIgnoringConfigUrl (because
>>> usually the submodule.<name>.url is what turns on the update). It looks working,
>>> maybe I even add setting the variable when chackout --to is used.
>
>> But it's not only submodule.<name>.url, the list goes on with
>> update, fetch & ignore and then there are the global options
>> like diff.submodule, diff.ignoreSubmodules and some more.
>
> I believe that parameters are important for some use, but I
> know several tesns of git users who have no idea bout them,
> and I myself only learned about them while working on this.
But we still want to support them all properly, no?
Show 8 quoted lines
> To have some a submodule not initialized in some sorktree is
> what I really need. I was sure before it is managed by
> having the submodule checked out. Probably I just did not
> run `submodule update` in the worktree where did not use
> submodules, but I cannot rely on it.  I see now from
> 211b7f19c7 that adding parameter for all updates will break
> the initalization. Maybe it would be better to have a
> runtime argument: `git submodule update --ignore-config-url`

Huh? I think we already have that: If you ignore the url config it's as if the submodule was never initialized, so you can just *not* run the "git submodule update" command at all to get that effect. No new option needed ;-)

Show 24 quoted lines
>> Thanks to you and Duy for discussing this with me! I'd sum it
>> up like this:
>>
>> *) Multiple worktrees are meant to couple separate worktrees
>>     with a single repository to avoid having to push and fetch
>>     each time to sync refs and also to not having to sync
>>     settings manually (with the benefit of some disk space
>>     savings). That's a cool feature and explains why a branch
>>     should be protected against being modified in different
>>     worktrees.
>
> I should notify that I am not the author of the feature,
> maybe Duy have some other vision.
>
>>     The first level submodule settings are shared between the
>>     multiple worktrees; submodule objects, settings and refs
>>     aren't (because the .git/modules directory isn't shared).
>>
>>     Looks like that would work with just what we have now, no?
>
> Yes, very much like what I proposed in $gmane/258173, but I
> need to have something about preventing checkout. And I
> should review what I've done since that, maybe there are
> more things to fix.

Hmm, I do not get the "preventing checkout" part. If you ran "git submodule init <path>" in just one of the multiple work trees a later "git submodule update" in any of the multiple work trees will checkout the submodule there. The only way I can imagine to change that is to implement separate worktree configurations for each of the multiple worktrees.

Show 9 quoted lines
>> *) I'd love to see a solution for sharing the object database
>>     between otherwise unrelated clones of the same project (so
>>     that fetching in one clone updates the objects in the common
>>     dir and gc cannot throw anything away used by one of the
>>     clones). But I'd expect a bare repository as the common one
>>     where we put the worktrees refs into their own namespaces.
>
> There is a GIT_NAMESPACE already, maybe it should be just
> extended to work with all commands?
As you already noticed, it isn't a solution for my problem.
Show 5 quoted lines
> btw, have you tried alternates? It does reduce the number of
> objects you need to keep very strongly. You can put in the
> alternate store only released branches which are guaranteed
> to be not force-updated, to avoid issues with missing
> objects, and it still helps.

Which is exactly what we do *not* want to do on a CI server, its purpose is to endlessly build development branches that are force-updated on a regular basis.

Previous: Max KirillovNext: Max Kirillov
Message 13 of 14 in “Squashed changes for multiple worktrees vs. submodules”
  1. Squashed changes for multiple worktrees vs. submodulesMax Kirillov, Nov 30, 2014
  2. Duy NguyenDec 1, 2014
  3. Max KirillovDec 1, 2014
  4. Jens LehmannDec 2, 2014
  5. Max KirillovDec 2, 2014
  6. Jens LehmannDec 4, 2014
  7. Duy NguyenDec 5, 2014
  8. Jens LehmannDec 6, 2014
  9. Max KirillovDec 5, 2014
  10. Jens LehmannDec 6, 2014
  11. Max KirillovDec 7, 2014
  12. Max KirillovDec 7, 2014
  13. Jens LehmannDec 8, 2014
  14. Max KirillovDec 8, 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.