Thanks Brandon for pointing out to use repo_git_path instead of manually constructing the path. That is the only change in this resend. Thanks, Stefan Stefan Beller (7): git-submodule.sh: align error reporting for update mode to use path git-submodule.sh: rename unused variables builtin/submodule--helper: factor out submodule updating builtin/submodule--helper: store update_clone information in a struct builtin/submodule--helper: factor out method to update a single submodule submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree submodule--helper: introduce new update-module-mode helper builtin/submodule--helper.c | 216 ++++++++++++++++++++++++++---------- git-submodule.sh | 29 +---- 2 files changed, 164 insertions(+), 81 deletions(-) (I am not yet using format-patches internal range diff version, but the paste below is manually crafted; the patch numbers are off, as the fix was done in the second to last patch) ./git-range-diff origin/sb/submodule-update-in-c... 1: 1c866b9831d ! 1: 7bb6249dea9 submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree @@ -49,7 +49,7 @@ + const char *rel_path; + struct strbuf sb = STRBUF_INIT; + -+ cfg_file = xstrfmt("%s/config", subrepo.gitdir); ++ cfg_file = repo_git_path(&subrepo, "config"); + + abs_path = absolute_pathdup(path); + rel_path = relative_path(abs_path, subrepo.gitdir, &sb); 2: 5a3587e9c25 = 2: 23dc45cee2d submodule--helper: introduce new update-module-mode helper