This series fixes the behaviour of git checkout/reset/read-tree --recurse-submodules when they are called in a linked worktree (created by git worktree add). Although submodules are cloned in $GIT_COMMON_DIR/worktrees/<name>/modules upon issuing git submodule update in the linked worktree, any invocation of git checkout/reset/read-tree --recurse-submodules that changes the state of the submodule(s) will incorrectly operate on the repositories of the submodules in the main worktree, i.e. the ones at $GIT_COMMON_DIR/modules/. The fourth patch fixes this behaviour by using get_git_dir() instead of git_common_dir() in submodule.c::submodule_move_head and submodule.c::submodule_unset_core_worktree to construct the path to the submodule repository. The first 3 patches are clean-up patches on t7410-submodule-checkout-to.sh (renamed to t2405-worktree-submodule.sh) to bring it up to date. Note: in the second test added in the fourth patch I used test_might_fail such that when the test is run on the current master, only the last test_cmp makes the test fail. If we want to be more strict I'll change that to : diff --git a/t/t2405-worktree-submodule.sh b/t/t2405-worktree-submodule.sh index eba17d9e35..31d156cce7 100755 --- a/t/t2405-worktree-submodule.sh +++ b/t/t2405-worktree-submodule.sh @@ -70,9 +70,9 @@ test_expect_success 'checkout --recurse-submodules uses $GIT_DIR for submodules test_expect_success 'core.worktree is removed in $GIT_DIR/modules/<name>/config, not in $GIT_COMMON_DIR/modules/<name>/config' ' git -C main/sub config --get core.worktree > expect && git -C checkout-recurse checkout --recurse-submodules first && - test_might_fail git -C main/.git/worktrees/checkout-recurse/modules/sub config --get core.worktree > linked-config && + test_expect_code 1 git -C main/.git/worktrees/checkout-recurse/modules/sub config --get core.worktree > linked-config && test_must_be_empty linked-config && - test_might_fail git -C main/sub config --get core.worktree > actual && + git -C main/sub config --get core.worktree > actual && test_cmp expect actual ' Cc:Max Kirillov max@xxxxxxxxxx [max@xxxxxxxxxx] Brandon Williams bwilliams.eng@xxxxxxxxx [bwilliams.eng@xxxxxxxxx] Jonathan Tan jonathantanmy@xxxxxxxxxx [jonathantanmy@xxxxxxxxxx] Stefan Beller stefanbeller@xxxxxxxxx [stefanbeller@xxxxxxxxx] Nguyễn Thái Ngọc Duy pclouds@xxxxxxxxx [pclouds@xxxxxxxxx] Philippe Blain (4): t7410: rename to t2405-worktree-submodule.sh t2405: use git -C and test_commit -C instead of subshells t2405: clarify test descriptions and simplify test submodule.c: use get_git_dir() instead of get_git_common_dir() submodule.c | 6 +-- t/t2405-worktree-submodule.sh | 79 ++++++++++++++++++++++++++++++++ t/t7410-submodule-checkout-to.sh | 77 ------------------------------- 3 files changed, 82 insertions(+), 80 deletions(-) create mode 100755 t/t2405-worktree-submodule.sh delete mode 100755 t/t7410-submodule-checkout-to.sh base-commit: b4615e40a8125477e18490d868f7b65954372b43 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-523%2Fphil-blain%2Fcheckout-recurse-in-linked-worktree-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-523/phil-blain/checkout-recurse-in-linked-worktree-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/523 -- gitgitgadget