The meat is in the second patch: 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. The first patch produces a nice helper function and some refactoring. Thanks, Stefan Stefan Beller (2): submodule.c: add has_submodules to check if we have any submodules clone: remember references for submodules even when not recursing builtin/checkout.c | 2 +- builtin/clone.c | 8 +++-- builtin/fetch.c | 2 +- builtin/read-tree.c | 2 +- builtin/submodule--helper.c | 6 ++-- submodule.c | 78 +++++++++++++++++++++++++++++++++++---------- submodule.h | 8 ++++- unpack-trees.c | 2 +- 8 files changed, 82 insertions(+), 26 deletions(-) -- 2.12.2.575.gb14f27f917