git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* recursive cloning with --reference-if-able + --dissociate
@ 2020-02-13 14:45 Rasmus Villemoes
  2020-02-13 16:18 ` Junio C Hamano
  0 siblings, 1 reply; 2+ messages in thread
From: Rasmus Villemoes @ 2020-02-13 14:45 UTC (permalink / raw)
  To: Git Mailing List

At $dayjob, most of our projects are organized as a rather small
superproject, with a number of git submodules. Usually, one of those
submodules is a linux kernel git tree.

For CI testing, we create a fresh docker container which starts by doing
a "git clone --recursive $superproject", which takes quite a while due
to the linux repo. So we'd like to speed that up by having a reasonable
up-to-date linux repo on each build slave, mapping that into the docker
container, and then telling git "when you get to cloning the src/linux
submodule, look over here for objects", i.e. having some way to have
--reference-if-able and --disassociate in effect for submodules.

If this is already possible, I can't find it in the documentation. And
if it doesn't exist, I can't really think of a good way to define the UI
for giving those options (other than, perhaps, having a top-level
--reference-if-able pass down to the submodules with the meaning 'when
initializing the submodule at some/path, try to use the submodule, if
any, at some/path in the referenced top-level repo'".

Rasmus

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: recursive cloning with --reference-if-able + --dissociate
  2020-02-13 14:45 recursive cloning with --reference-if-able + --dissociate Rasmus Villemoes
@ 2020-02-13 16:18 ` Junio C Hamano
  0 siblings, 0 replies; 2+ messages in thread
From: Junio C Hamano @ 2020-02-13 16:18 UTC (permalink / raw)
  To: Rasmus Villemoes; +Cc: Git Mailing List

Rasmus Villemoes <rv@rasmusvillemoes.dk> writes:

> At $dayjob, most of our projects are organized as a rather small
> superproject, with a number of git submodules. Usually, one of those
> submodules is a linux kernel git tree.
>
> For CI testing, we create a fresh docker container which starts by doing
> a "git clone --recursive $superproject", which takes quite a while due
> to the linux repo. So we'd like to speed that up by having a reasonable
> up-to-date linux repo on each build slave, mapping that into the docker
> container, and then telling git "when you get to cloning the src/linux
> submodule, look over here for objects", i.e. having some way to have
> --reference-if-able and --disassociate in effect for submodules.
>
> If this is already possible, I can't find it in the documentation. And
> if it doesn't exist, I can't really think of a good way to define the UI
> for giving those options (other than, perhaps, having a top-level
> --reference-if-able pass down to the submodules with the meaning 'when
> initializing the submodule at some/path, try to use the submodule, if
> any, at some/path in the referenced top-level repo'".

Sorry for not giving a full solution but I suspect that discussing
this topic will lead to a useful new feature, similar in spirit to
the url rewriting (i.e. "url.$LOCAL.insteadOf = $REMOTE") to tell
Git to use a local mirror $LOCAL instead of the remote authentic
repository when interacting with $REMOTE.

Perhaps "url.$LOCALREF.autoReference = $REMOTE" to specify a local
mirror that does not have to be completely up-to-date, that will
altomatically be used as if "--reference-if-able $LOCALREF" is
passed when running "git clone $REMOTE", or something like that.

The actual design has to get a lot more involved, including
deciding:

 - if autoReference is orthogonal to --disssociate (I think it
   should be but others may differ).

 - how the way --dissociate is passed down from the top-level
   superproject to cloning of submodules is controlled (passing
   unconditionally would probably be too coarse, but I dunno).

etc. etc.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-02-13 16:18 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-13 14:45 recursive cloning with --reference-if-able + --dissociate Rasmus Villemoes
2020-02-13 16:18 ` Junio C Hamano

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).