I've been investigating what is required to get submodules and partial clones to work well together. The issue seems to be that the correct repository is not passed around, so we sometimes end up trying to fetch objects from the wrong place. These patches don't make promisor_remote_get_direct handle different repositories because I've not found a case where that is necessary. The patches rework various cases where objects from a submodule are added to the object store of the main repository. There are some remaining cases where add_to_alternates_memory is used to do this, but add_submodule_odb has been removed. I expect there will be some remaining issues, but these changes seem to be enough to get the basics working. Andrew Oakley (6): refs: store owning repository for object lookup submodule: use separate submodule repositories refs: use correct repo in refs_peel_ref merge-recursive: use separate submodule repository submodule: remove add_submodule_odb submodule: use partial clone filter Luke Diamand (1): Add failing test for partial clones with submodules builtin/clone.c | 5 ++ builtin/fsck.c | 2 +- builtin/pack-objects.c | 2 +- builtin/submodule--helper.c | 21 +++-- git-submodule.sh | 20 ++++- http-push.c | 2 +- merge-recursive.c | 73 ++++++++------- object.c | 7 +- object.h | 2 +- refs.c | 37 ++++---- refs.h | 37 +------- refs/debug.c | 3 +- refs/files-backend.c | 22 +++-- refs/iterator.c | 11 ++- refs/packed-backend.c | 15 ++-- refs/packed-backend.h | 3 +- refs/ref-cache.c | 5 +- refs/refs-internal.h | 18 +++- revision.c | 21 ++--- revision.h | 1 - submodule.c | 135 +++++++++++++--------------- submodule.h | 11 ++- t/helper/test-example-decorate.c | 6 +- t/helper/test-reach.c | 2 +- t/helper/test-ref-store.c | 1 - t/t0411-partial-clone-submodules.sh | 44 +++++++++ t/t1406-submodule-ref-store.sh | 17 +--- tag.c | 4 +- tag.h | 2 +- upload-pack.c | 2 +- walker.c | 3 +- 31 files changed, 301 insertions(+), 233 deletions(-) create mode 100755 t/t0411-partial-clone-submodules.sh -- 2.26.2