Git development
 help / color / mirror / Atom feed
* [PATCH 0/3] worktree: add --recurse-submodules support to git worktree add
@ 2026-04-16 16:32 Jimmy Aguilar Mena
  2026-04-16 17:05 ` Junio C Hamano
  0 siblings, 1 reply; 4+ messages in thread
From: Jimmy Aguilar Mena @ 2026-04-16 16:32 UTC (permalink / raw)
  To: git

This series implements the native --recurse-submodules flag for
"git worktree add" discussed in the earlier RFC thread.

The approach follows Phillip Wood's and Junio's feedback: each linked
worktree gets its own per-worktree submodule gitdir under
$GIT_COMMON_DIR/worktrees/<id>/modules/<name>/, so HEAD, refs, and
the index are independent per worktree while pack files and loose
objects are shared via hardlinks.  The gitdir isolation is the same
model git worktree already uses for the superproject.

Patch 1 adds the --recurse-submodules flag to builtin/worktree.c and
calls "git submodule update --init --recursive" from within the new
worktree after checkout.

Patch 2 teaches clone_submodule() in builtin/submodule--helper.c to
detect when the main worktree already has the submodule cloned and
reuse it via "git clone --local --no-checkout --separate-git-dir"
instead of fetching from the remote URL.  This avoids redundant
network access and disk use: the objects are already present locally.

Patch 3 adds tests to t2405-worktree-submodule.sh covering both the
happy path and the gitdir-isolation invariant.

Cleanup is automatic: submodule gitdirs under worktrees/<id>/modules/
are removed when "git worktree remove" calls remove_dir_recursively()
on the worktree entry, exactly as with the superproject's per-worktree
state.

Changes since the RFC:
- Replaced the shell-script cp -al prototype with a native C
   implementation in builtin/worktree.c and builtin/submodule--helper.c.
- Per-worktree gitdir isolation is now handled by the existing
   submodule_name_to_gitdir() path; no extra plumbing is needed.
- Added t2405 tests verifying both behaviour and gitdir placement.

Jimmy Aguilar Mena (3):
   worktree: add --recurse-submodules flag to worktree add
   submodule--helper: reuse main-worktree gitdir in linked worktrees
   t2405: add tests for worktree add --recurse-submodules

  builtin/submodule--helper.c   | 54 +++++++++++++++++++++++++++++++++++
  builtin/worktree.c            | 23 +++++++++++++++
  t/t2405-worktree-submodule.sh | 24 +++++++++++++++-
  3 files changed, 100 insertions(+), 1 deletion(-)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-04-17  9:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-16 16:32 [PATCH 0/3] worktree: add --recurse-submodules support to git worktree add Jimmy Aguilar Mena
2026-04-16 17:05 ` Junio C Hamano
2026-04-16 18:38   ` Phillip Wood
2026-04-17  9:38     ` Phillip Wood

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox