Currently when git-fetch is asked to recurse into submodules, it dispatches a plain "git-fetch -C <submodule-dir>" (and some submodule related options such as prefix and recusing strategy, but) without any information of the remote or the tip that should be fetched. This works surprisingly well in some workflows, not so well in others, which this series aims to fix. The first patches provide new basic functionality and do some refactoring; the interesting part is in the two last patches. This was discussed in https://public-inbox.org/git/20180808221752.195419-1-sbeller@xxxxxxxxxx/ and I think I addressed all feedback so far. Thanks, Stefan Stefan Beller (9): string-list: add string_list_{pop, last} functions sha1-array: provide oid_array_filter submodule.c: fix indentation submodule.c: sort changed_submodule_names before searching it submodule: move global changed_submodule_names into fetch submodule struct submodule.c: do not copy around submodule list submodule: fetch in submodules git directory instead of in worktree fetch: retry fetching submodules if sha1 were not fetched builtin/fetch: check for submodule updates for non branch fetches builtin/fetch.c | 14 +-- sha1-array.c | 18 ++++ sha1-array.h | 5 + string-list.c | 14 +++ string-list.h | 11 +++ submodule.c | 189 ++++++++++++++++++++++++++++-------- t/t5526-fetch-submodules.sh | 23 ++++- 7 files changed, 227 insertions(+), 47 deletions(-) -- 2.19.0.397.gdd90340f6a-goog