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

Re: git submodules and commit

From
Johannes Sixt <j.sixt@viscovery.net>
Date
Jul 16, 2008, 11:35 UTC
Message-ID
<487DDCFC.9020007@viscovery.net>
In-Reply-To
<320075ff0807160402s7429291ela288b42d99c1ec53@mail.gmail.com>
Nigel Magnay schrieb:
Show 27 quoted lines
> On Wed, Jul 16, 2008 at 11:47 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:
>> Nigel Magnay schrieb:
>>> For me, in some really high proportion of cases, I think I want 'git
>>> commit' to mean 'commit to any child repositories, any sibling
>>> repositories, and any parent repositories (updating the submodule sha1
>>> as appropriate). In other words, 'pretend like the whole thing is one
>>> big repo'.
>> And I think that this is the problem: If this way of commiting your
>> changes is *required* in the *majority* of cases, then you are IMO outside
>> the intended use-case of submodules. You are better served by really
>> making this one big repo.
>>
> 
> Hm - then my contention is that the scope of submodules needs to be
> expanded (or something needs to be built on top).
> 
> One-big-repo doesn't fly - > 75% of the code volume (the 'other'
> modules) are shared between multiple projects. In SVN these are just
> svn:externals (which has it's own imperfections).
> 
> I think it's a common usecase. You have 'shared' modules and
> 'project-specific' modules[*]. The 'shared' modules you hope don't
> change very much, but they are part of the overall project
> configuration - it's really nice that you can branch so easily in git,
> then get the module owner to merge those changes into the next release
> at their leisure. The superproject then represents the correct
> configuration of submodule trees to make a valid build.

Ah, is this your actual scenario? Just to make sure we are talking about the same thing:

- You own superproject P.
- $Maintainer owns submodule S.
- You use S in P.
- You make changes to S that you would like $Maintainer to include in the
next release.
x You use in P your changes to S while $Maintainer has not yet released a
new version of S with your changes.
- Finally your changes arrive via the new release of S.

That *is* the intended use-case for submodules. But you have to play the game by the rules:

- $Maintainer defines the official states of S.
- You must never commit an unofficial state of S in P.
The critical step in above list I marked with x:
- During the period where only *you* have the new changes to S, you must
*not* commit your submodule state to P. Instead, you write P in such a way
that it can work with both the old version of S and the upcoming release
that will have your changes[*]. This way you make sure that your consumers
of P always have a working version regardless of which version of S they use.
- After you have received the new release of S from $Maintainer, you
commit the new state of S in P. And if you are nice to your consumers of
P, then you *do not* remove the workaround from P just yet, so that you
don't force them to upgrade S. You will remove it later only if it becomes
a maintainance burden.

[*] If it is not possible to make P work with old and new versions, then you have to work closely with the $Maintainer so that you never need commit an unofficial state of S into P.

-- Hannes
Previous: Nigel MagnayNext: Petr Baudis
Message 4 of 14 in “git submodules and commit”
  1. Nigel MagnayJul 16, 2008
  2. Johannes SixtJul 16, 2008
  3. Nigel MagnayJul 16, 2008
  4. Johannes SixtJul 16, 2008
  5. Petr BaudisJul 16, 2008
  6. Nigel MagnayJul 16, 2008
  7. Johannes SixtJul 16, 2008
  8. Nigel MagnayJul 16, 2008
  9. Petr BaudisJul 16, 2008
  10. Nigel MagnayJul 16, 2008
  11. Avery PennarunJul 16, 2008
  12. Nigel MagnayJul 17, 2008
  13. Avery PennarunJul 17, 2008
  14. Ping YinJul 18, 2008

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.