The commit 31224cbdc7 (clone: recursive and reference option triggers submodule alternates, 2016-08-17) argued for any further `submodule update` to respect the initial setup. This is not the case if you only pass '--reference[-if-able]' to the initial clone without instructing to recurse into submodules. If there are submodules however the user is likely to later run a 'submodule update --init' to obtain the submodules. In this case we also want to have the references available. Reported-by: Maxime Viargues <maxime.viargues@xxxxxxxxxx> Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- builtin/clone.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/builtin/clone.c b/builtin/clone.c index de85b85254..5f022e39e9 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -24,6 +24,7 @@ #include "remote.h" #include "run-command.h" #include "connected.h" +#include "submodule.h" /* * Overall FIXMEs: @@ -993,11 +994,14 @@ int cmd_clone(int argc, const char **argv, const char *prefix) string_list_append(&option_config, strbuf_detach(&sb, NULL)); } + } + if (option_recurse_submodules.nr || + has_submodules(SUBMODULE_CHECK_GITMODULES_IN_WT)) { if (option_required_reference.nr && option_optional_reference.nr) - die(_("clone --recursive is not compatible with " - "both --reference and --reference-if-able")); + die(_("submodules are incompatible with both " + "--reference and --reference-if-able")); else if (option_required_reference.nr) { string_list_append(&option_config, "submodule.alternateLocation=superproject"); -- 2.12.2.575.gb14f27f917