From: Johannes Sixt <j.sixt@viscovery.net>
To: Nigel Magnay <nigel.magnay@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: git submodules and commit
Date: Wed, 16 Jul 2008 13:35:24 +0200 [thread overview]
Message-ID: <487DDCFC.9020007@viscovery.net> (raw)
In-Reply-To: <320075ff0807160402s7429291ela288b42d99c1ec53@mail.gmail.com>
Nigel Magnay schrieb:
> 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
next prev parent reply other threads:[~2008-07-16 11:36 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <320075ff0807160331j30e8f832m4de3e3bbe9c26801@mail.gmail.com>
2008-07-16 10:32 ` git submodules and commit Nigel Magnay
2008-07-16 10:47 ` Johannes Sixt
2008-07-16 11:02 ` Nigel Magnay
2008-07-16 11:35 ` Johannes Sixt [this message]
2008-07-16 12:11 ` Petr Baudis
2008-07-16 12:48 ` Nigel Magnay
2008-07-16 13:38 ` Johannes Sixt
2008-07-16 14:03 ` Nigel Magnay
2008-07-16 14:17 ` Petr Baudis
2008-07-16 14:31 ` Nigel Magnay
2008-07-16 15:43 ` Avery Pennarun
2008-07-17 9:47 ` Nigel Magnay
2008-07-17 15:12 ` Avery Pennarun
2008-07-18 16:11 ` Ping Yin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=487DDCFC.9020007@viscovery.net \
--to=j.sixt@viscovery.net \
--cc=git@vger.kernel.org \
--cc=nigel.magnay@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).