{"thread":{"id":"53180","subject":"[BUG] submodule move badly handled by git-rebase","startedAt":"2020-04-07T16:34:55Z","lastAt":"2020-04-08T16:34:04Z","messageCount":6,"participants":["ydirson@free.fr","Elijah Newren"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"394973","messageId":"277700231.805340039.1586277291215.JavaMail.root@zimbra39-e7","threadId":"53180","inReplyTo":"702823257.805273759.1586276452976.JavaMail.root@zimbra39-e7","subject":"[BUG] submodule move badly handled by git-rebase","fromName":"","fromEmail":"ydirson@free.fr","sentAt":"2020-04-07T16:34:51Z","receivedAt":"2020-04-07T16:34:55Z","isPatch":false,"sender":{"key":"ydirson@free.fr","avatar":null},"body":"Hello all,\n\nWhen rebasing commits involving move of a submodule, git-rebase fails to\nrecord in index the \"add\" part of the rename.  This leaves the workdir\ndirty and the rebase gets stopped.\n\nfast-export of a testcase is attached.  To reproduce, just \n\"git rebase -i\", add a \"break\" before the move commit,\nuse this to introduce some noise, and watch.\n\nBest regards,\n-- \nYann\n\n\n(master)$ git rebase -i HEAD^^\nhint: Waiting for your editor to close the file... Waiting for Emacs...\nStopped at b0e1b00... add submodule\n\n(master|REBASE 2/3)$ echo >>README \n\n(master|REBASE 2/3)$ git commit -a -m noise\n[detached HEAD d67c886] noise\n 1 file changed, 1 insertion(+)\n\n(master|REBASE 2/3)$ git rebase --continue \nAdding as subdir/gitlab-oe~08e230f... move submodule instead\nerror: could not apply 08e230f... move submodule\nResolve all conflicts manually, mark them as resolved with\n\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\nYou can instead skip this commit: run \"git rebase --skip\".\nTo abort and get back to the state before \"git rebase\", run \"git rebase --abort\".\nCould not apply 08e230f... move submodule\n\n(master|REBASE 3/3)$ git st\ninteractive rebase in progress; onto c21ef8e\nLast commands done (3 commands done):\n   break\n   pick 08e230f move submodule\n  (see more in file .git/rebase-merge/done)\nNo commands remaining.\nYou are currently rebasing branch 'master' on 'c21ef8e'.\n  (fix conflicts and then run \"git rebase --continue\")\n  (use \"git rebase --skip\" to skip this patch)\n  (use \"git rebase --abort\" to check out the original branch)\n\nChanges to be committed:\n  (use \"git restore --staged <file>...\" to unstage)\n        modified:   .gitmodules\n        deleted:    gitlab-oe\n\nUnmerged paths:\n  (use \"git restore --staged <file>...\" to unstage)\n  (use \"git add <file>...\" to mark resolution)\n        added by them:   subdir/gitlab-oe\n\n(master|REBASE 3/3)$ "},{"id":"395007","messageId":"CABPp-BEHQUzRjddKrC7Q7j+2W-W9ZjdVnXVjsM6wVWrpDF7cwQ@mail.gmail.com","threadId":"53180","inReplyTo":"277700231.805340039.1586277291215.JavaMail.root@zimbra39-e7","subject":"Re: [BUG] submodule move badly handled by git-rebase","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2020-04-07T20:49:15Z","receivedAt":"2020-04-07T20:49:29Z","isPatch":false,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"Hi Yann,\n\nOn Tue, Apr 7, 2020 at 9:36 AM <ydirson@free.fr> wrote:\n>\n> Hello all,\n>\n> When rebasing commits involving move of a submodule, git-rebase fails to\n> record in index the \"add\" part of the rename.  This leaves the workdir\n> dirty and the rebase gets stopped.\n>\n> fast-export of a testcase is attached.  To reproduce, just\n> \"git rebase -i\", add a \"break\" before the move commit,\n> use this to introduce some noise, and watch.\n>\n> Best regards,\n> --\n> Yann\n>\n>\n> (master)$ git rebase -i HEAD^^\n> hint: Waiting for your editor to close the file... Waiting for Emacs...\n> Stopped at b0e1b00... add submodule\n>\n> (master|REBASE 2/3)$ echo >>README\n>\n> (master|REBASE 2/3)$ git commit -a -m noise\n> [detached HEAD d67c886] noise\n>  1 file changed, 1 insertion(+)\n>\n> (master|REBASE 2/3)$ git rebase --continue\n> Adding as subdir/gitlab-oe~08e230f... move submodule instead\n> error: could not apply 08e230f... move submodule\n> Resolve all conflicts manually, mark them as resolved with\n> \"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n> You can instead skip this commit: run \"git rebase --skip\".\n> To abort and get back to the state before \"git rebase\", run \"git rebase --abort\".\n> Could not apply 08e230f... move submodule\n>\n> (master|REBASE 3/3)$ git st\n> interactive rebase in progress; onto c21ef8e\n> Last commands done (3 commands done):\n>    break\n>    pick 08e230f move submodule\n>   (see more in file .git/rebase-merge/done)\n> No commands remaining.\n> You are currently rebasing branch 'master' on 'c21ef8e'.\n>   (fix conflicts and then run \"git rebase --continue\")\n>   (use \"git rebase --skip\" to skip this patch)\n>   (use \"git rebase --abort\" to check out the original branch)\n>\n> Changes to be committed:\n>   (use \"git restore --staged <file>...\" to unstage)\n>         modified:   .gitmodules\n>         deleted:    gitlab-oe\n>\n> Unmerged paths:\n>   (use \"git restore --staged <file>...\" to unstage)\n>   (use \"git add <file>...\" to mark resolution)\n>         added by them:   subdir/gitlab-oe\n>\n> (master|REBASE 3/3)$\n\nI couldn't figure out how to duplicate.  Maybe I did something wrong,\nbut it was:\n    # download your fast-export stream\n    git init temp\n    cd temp\n    cat ~/Downloads/submodule-move.fexp | git fast-import --quiet\n    git checkout master\n    git rebase -i HEAD^^\n    # Insert a line with just 'b' between the two pick lines; save and\nexit and when it breaks:\n    echo >>README\n    git commit -a -m noise\n    git rebase --continue\n\nAfter the rebase --continue, the rebase completes just fine applying\nthe patch with the submodule move.  git range-diff master@{1}... will\nshow that I inserted a new commit in the middle.  git log --raw looks\ngood, showing all four commits including the moved submodule at the\nend.\n\n\nWhat git version did you use?  Do you need special settings (what's in\nyour ~/.gitconfig and your .git/config)?\n"},{"id":"395065","messageId":"1540391834.807942587.1586332379241.JavaMail.root@zimbra39-e7","threadId":"53180","inReplyTo":"CABPp-BEHQUzRjddKrC7Q7j+2W-W9ZjdVnXVjsM6wVWrpDF7cwQ@mail.gmail.com","subject":"Re: [BUG] submodule move badly handled by git-rebase","fromName":"","fromEmail":"ydirson@free.fr","sentAt":"2020-04-08T07:52:59Z","receivedAt":"2020-04-08T07:53:04Z","isPatch":false,"sender":{"key":"ydirson@free.fr","avatar":null},"body":"Hi Elijah,\n\n> Hi Yann,\n> \n> On Tue, Apr 7, 2020 at 9:36 AM <ydirson@free.fr> wrote:\n> >\n> > Hello all,\n> >\n> > When rebasing commits involving move of a submodule, git-rebase\n> > fails to\n> > record in index the \"add\" part of the rename.  This leaves the\n> > workdir\n> > dirty and the rebase gets stopped.\n> >\n> > fast-export of a testcase is attached.  To reproduce, just\n> > \"git rebase -i\", add a \"break\" before the move commit,\n> > use this to introduce some noise, and watch.\n> >\n> > Best regards,\n> > --\n> > Yann\n> >\n> >\n> > (master)$ git rebase -i HEAD^^\n> > hint: Waiting for your editor to close the file... Waiting for\n> > Emacs...\n> > Stopped at b0e1b00... add submodule\n> >\n> > (master|REBASE 2/3)$ echo >>README\n> >\n> > (master|REBASE 2/3)$ git commit -a -m noise\n> > [detached HEAD d67c886] noise\n> >  1 file changed, 1 insertion(+)\n> >\n> > (master|REBASE 2/3)$ git rebase --continue\n> > Adding as subdir/gitlab-oe~08e230f... move submodule instead\n> > error: could not apply 08e230f... move submodule\n> > Resolve all conflicts manually, mark them as resolved with\n> > \"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n> > You can instead skip this commit: run \"git rebase --skip\".\n> > To abort and get back to the state before \"git rebase\", run \"git\n> > rebase --abort\".\n> > Could not apply 08e230f... move submodule\n> >\n> > (master|REBASE 3/3)$ git st\n> > interactive rebase in progress; onto c21ef8e\n> > Last commands done (3 commands done):\n> >    break\n> >    pick 08e230f move submodule\n> >   (see more in file .git/rebase-merge/done)\n> > No commands remaining.\n> > You are currently rebasing branch 'master' on 'c21ef8e'.\n> >   (fix conflicts and then run \"git rebase --continue\")\n> >   (use \"git rebase --skip\" to skip this patch)\n> >   (use \"git rebase --abort\" to check out the original branch)\n> >\n> > Changes to be committed:\n> >   (use \"git restore --staged <file>...\" to unstage)\n> >         modified:   .gitmodules\n> >         deleted:    gitlab-oe\n> >\n> > Unmerged paths:\n> >   (use \"git restore --staged <file>...\" to unstage)\n> >   (use \"git add <file>...\" to mark resolution)\n> >         added by them:   subdir/gitlab-oe\n> >\n> > (master|REBASE 3/3)$\n> \n> I couldn't figure out how to duplicate.  Maybe I did something wrong,\n> but it was:\n>     # download your fast-export stream\n>     git init temp\n>     cd temp\n>     cat ~/Downloads/submodule-move.fexp | git fast-import --quiet\n>     git checkout master\n>     git rebase -i HEAD^^\n>     # Insert a line with just 'b' between the two pick lines; save\n>     and\n> exit and when it breaks:\n>     echo >>README\n>     git commit -a -m noise\n>     git rebase --continue\n> \n> After the rebase --continue, the rebase completes just fine applying\n> the patch with the submodule move.  git range-diff master@{1}... will\n> show that I inserted a new commit in the middle.  git log --raw looks\n> good, showing all four commits including the moved submodule at the\n> end.\n\nYou're right, I missed crucial point: no problem appears unless the submodule\nis initialized.  After checking out the master branch (and possibly issuing\n\"git reset --hard\" to make sure everything is clean), it is necessary to\nrun \"git submodule update --init\".\n\n\n> What git version did you use?  Do you need special settings (what's\n> in\n> your ~/.gitconfig and your .git/config)?\n\nThis is 2.26.0, but like my other report I had it with 2.25.1 already.\nJust tested with an clear config (HOME and GIT_CONFIG_NOSYSTEM set) and\nthe problem triggers as well.\n\nBest regards,\n-- \nYann\n\n"},{"id":"395070","messageId":"CABPp-BHFnFx-YV=vcQ0O-s0xKUi9g0n5MWEssWb_B_iTv7LGLQ@mail.gmail.com","threadId":"53180","inReplyTo":"1540391834.807942587.1586332379241.JavaMail.root@zimbra39-e7","subject":"Re: [BUG] submodule move badly handled by git-rebase","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2020-04-08T16:21:22Z","receivedAt":"2020-04-08T16:21:38Z","isPatch":false,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"Hi Yann,\n\nOn Wed, Apr 8, 2020 at 12:52 AM <ydirson@free.fr> wrote:\n>\n> Hi Elijah,\n>\n> > Hi Yann,\n> >\n> > On Tue, Apr 7, 2020 at 9:36 AM <ydirson@free.fr> wrote:\n> > >\n> > > Hello all,\n> > >\n> > > When rebasing commits involving move of a submodule, git-rebase\n> > > fails to\n> > > record in index the \"add\" part of the rename.  This leaves the\n> > > workdir\n> > > dirty and the rebase gets stopped.\n> > >\n> > > fast-export of a testcase is attached.  To reproduce, just\n> > > \"git rebase -i\", add a \"break\" before the move commit,\n> > > use this to introduce some noise, and watch.\n> > >\n> > > Best regards,\n> > > --\n> > > Yann\n> > >\n> > >\n> > > (master)$ git rebase -i HEAD^^\n> > > hint: Waiting for your editor to close the file... Waiting for\n> > > Emacs...\n> > > Stopped at b0e1b00... add submodule\n> > >\n> > > (master|REBASE 2/3)$ echo >>README\n> > >\n> > > (master|REBASE 2/3)$ git commit -a -m noise\n> > > [detached HEAD d67c886] noise\n> > >  1 file changed, 1 insertion(+)\n> > >\n> > > (master|REBASE 2/3)$ git rebase --continue\n> > > Adding as subdir/gitlab-oe~08e230f... move submodule instead\n> > > error: could not apply 08e230f... move submodule\n> > > Resolve all conflicts manually, mark them as resolved with\n> > > \"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n> > > You can instead skip this commit: run \"git rebase --skip\".\n> > > To abort and get back to the state before \"git rebase\", run \"git\n> > > rebase --abort\".\n> > > Could not apply 08e230f... move submodule\n> > >\n> > > (master|REBASE 3/3)$ git st\n> > > interactive rebase in progress; onto c21ef8e\n> > > Last commands done (3 commands done):\n> > >    break\n> > >    pick 08e230f move submodule\n> > >   (see more in file .git/rebase-merge/done)\n> > > No commands remaining.\n> > > You are currently rebasing branch 'master' on 'c21ef8e'.\n> > >   (fix conflicts and then run \"git rebase --continue\")\n> > >   (use \"git rebase --skip\" to skip this patch)\n> > >   (use \"git rebase --abort\" to check out the original branch)\n> > >\n> > > Changes to be committed:\n> > >   (use \"git restore --staged <file>...\" to unstage)\n> > >         modified:   .gitmodules\n> > >         deleted:    gitlab-oe\n> > >\n> > > Unmerged paths:\n> > >   (use \"git restore --staged <file>...\" to unstage)\n> > >   (use \"git add <file>...\" to mark resolution)\n> > >         added by them:   subdir/gitlab-oe\n> > >\n> > > (master|REBASE 3/3)$\n> >\n> > I couldn't figure out how to duplicate.  Maybe I did something wrong,\n> > but it was:\n> >     # download your fast-export stream\n> >     git init temp\n> >     cd temp\n> >     cat ~/Downloads/submodule-move.fexp | git fast-import --quiet\n> >     git checkout master\n> >     git rebase -i HEAD^^\n> >     # Insert a line with just 'b' between the two pick lines; save\n> >     and\n> > exit and when it breaks:\n> >     echo >>README\n> >     git commit -a -m noise\n> >     git rebase --continue\n> >\n> > After the rebase --continue, the rebase completes just fine applying\n> > the patch with the submodule move.  git range-diff master@{1}... will\n> > show that I inserted a new commit in the middle.  git log --raw looks\n> > good, showing all four commits including the moved submodule at the\n> > end.\n>\n> You're right, I missed crucial point: no problem appears unless the submodule\n> is initialized.  After checking out the master branch (and possibly issuing\n> \"git reset --hard\" to make sure everything is clean), it is necessary to\n> run \"git submodule update --init\".\n>\n>\n> > What git version did you use?  Do you need special settings (what's\n> > in\n> > your ~/.gitconfig and your .git/config)?\n>\n> This is 2.26.0, but like my other report I had it with 2.25.1 already.\n> Just tested with an clear config (HOME and GIT_CONFIG_NOSYSTEM set) and\n> the problem triggers as well.\n\nAh, gotcha.  With the \"git submodule update --init\", I can duplicate\nwith 2.26.0 and 2.24.1 and I probably could with any other git version\ngoing back to when submodules were introduced.\n\nI decided to also test with the \"ort\" merge strategy[1] that I haven't\nworked on in over a month.  It fixes this testcase.  So this is yet\nanother example of it having better correctness than merge-recursive.\nThanks for the report.\n\nElijah\n\n[1] https://github.com/newren/git/tree/git-merge-2020-demo\n"},{"id":"395071","messageId":"907083995.810443848.1586362984955.JavaMail.root@zimbra39-e7","threadId":"53180","inReplyTo":"1540391834.807942587.1586332379241.JavaMail.root@zimbra39-e7","subject":"Re: [BUG] submodule move badly handled by git-rebase","fromName":"","fromEmail":"ydirson@free.fr","sentAt":"2020-04-08T16:23:04Z","receivedAt":"2020-04-08T16:23:09Z","isPatch":false,"sender":{"key":"ydirson@free.fr","avatar":null},"body":"This may be related to another funky behaviour I just noticed, linked\nto moving submodules around:\n\n- when initially created, the $TOP/orig-name submodule's git-dir gets created in\n  $TOP/.git/modules/orig-name, with $TOP/.git/modules/orig-name/config\n  containing a core.worktree value pointing to $TOP/orig-name\n- when moving the submodule, only the submodule worktree is moved, the git-dir\n  being the same $TOP/.git/modules/orig-name, where the core.worktree still\n  points to the old location\n\nOther unwanted behaviour include \"git clean\" reporting (and possibly cleaning)\nfiles from the wrong work tree - it took me head-scratching to understand why\n\"git clean -fdx\" was ignoring all the cruft I had in this worktree...\n\nWhy is it that we need a core.worktree setting at all in there ?  Removing it\nallows \"git clean\" to do what's expected of it.  OTOH it does not make the\noriginal problem go away...\n\n----- Mail original -----\n> De: ydirson@free.fr\n> À: \"Elijah Newren\" <newren@gmail.com>\n> Cc: \"git\" <git@vger.kernel.org>\n> Envoyé: Mercredi 8 Avril 2020 09:52:59\n> Objet: Re: [BUG] submodule move badly handled by git-rebase\n> \n> Hi Elijah,\n> \n> > Hi Yann,\n> > \n> > On Tue, Apr 7, 2020 at 9:36 AM <ydirson@free.fr> wrote:\n> > >\n> > > Hello all,\n> > >\n> > > When rebasing commits involving move of a submodule, git-rebase\n> > > fails to\n> > > record in index the \"add\" part of the rename.  This leaves the\n> > > workdir\n> > > dirty and the rebase gets stopped.\n> > >\n> > > fast-export of a testcase is attached.  To reproduce, just\n> > > \"git rebase -i\", add a \"break\" before the move commit,\n> > > use this to introduce some noise, and watch.\n> > >\n> > > Best regards,\n> > > --\n> > > Yann\n> > >\n> > >\n> > > (master)$ git rebase -i HEAD^^\n> > > hint: Waiting for your editor to close the file... Waiting for\n> > > Emacs...\n> > > Stopped at b0e1b00... add submodule\n> > >\n> > > (master|REBASE 2/3)$ echo >>README\n> > >\n> > > (master|REBASE 2/3)$ git commit -a -m noise\n> > > [detached HEAD d67c886] noise\n> > >  1 file changed, 1 insertion(+)\n> > >\n> > > (master|REBASE 2/3)$ git rebase --continue\n> > > Adding as subdir/gitlab-oe~08e230f... move submodule instead\n> > > error: could not apply 08e230f... move submodule\n> > > Resolve all conflicts manually, mark them as resolved with\n> > > \"git add/rm <conflicted_files>\", then run \"git rebase\n> > > --continue\".\n> > > You can instead skip this commit: run \"git rebase --skip\".\n> > > To abort and get back to the state before \"git rebase\", run \"git\n> > > rebase --abort\".\n> > > Could not apply 08e230f... move submodule\n> > >\n> > > (master|REBASE 3/3)$ git st\n> > > interactive rebase in progress; onto c21ef8e\n> > > Last commands done (3 commands done):\n> > >    break\n> > >    pick 08e230f move submodule\n> > >   (see more in file .git/rebase-merge/done)\n> > > No commands remaining.\n> > > You are currently rebasing branch 'master' on 'c21ef8e'.\n> > >   (fix conflicts and then run \"git rebase --continue\")\n> > >   (use \"git rebase --skip\" to skip this patch)\n> > >   (use \"git rebase --abort\" to check out the original branch)\n> > >\n> > > Changes to be committed:\n> > >   (use \"git restore --staged <file>...\" to unstage)\n> > >         modified:   .gitmodules\n> > >         deleted:    gitlab-oe\n> > >\n> > > Unmerged paths:\n> > >   (use \"git restore --staged <file>...\" to unstage)\n> > >   (use \"git add <file>...\" to mark resolution)\n> > >         added by them:   subdir/gitlab-oe\n> > >\n> > > (master|REBASE 3/3)$\n> > \n> > I couldn't figure out how to duplicate.  Maybe I did something\n> > wrong,\n> > but it was:\n> >     # download your fast-export stream\n> >     git init temp\n> >     cd temp\n> >     cat ~/Downloads/submodule-move.fexp | git fast-import --quiet\n> >     git checkout master\n> >     git rebase -i HEAD^^\n> >     # Insert a line with just 'b' between the two pick lines; save\n> >     and\n> > exit and when it breaks:\n> >     echo >>README\n> >     git commit -a -m noise\n> >     git rebase --continue\n> > \n> > After the rebase --continue, the rebase completes just fine\n> > applying\n> > the patch with the submodule move.  git range-diff master@{1}...\n> > will\n> > show that I inserted a new commit in the middle.  git log --raw\n> > looks\n> > good, showing all four commits including the moved submodule at the\n> > end.\n> \n> You're right, I missed crucial point: no problem appears unless the\n> submodule\n> is initialized.  After checking out the master branch (and possibly\n> issuing\n> \"git reset --hard\" to make sure everything is clean), it is necessary\n> to\n> run \"git submodule update --init\".\n> \n> \n> > What git version did you use?  Do you need special settings (what's\n> > in\n> > your ~/.gitconfig and your .git/config)?\n> \n> This is 2.26.0, but like my other report I had it with 2.25.1\n> already.\n> Just tested with an clear config (HOME and GIT_CONFIG_NOSYSTEM set)\n> and\n> the problem triggers as well.\n> \n> Best regards,\n> --\n> Yann\n> \n> \n"},{"id":"395072","messageId":"CABPp-BHtwTmTT0R7Mu3=YQ=sPDcuvkXqutBjTTBECW4MXQoYWg@mail.gmail.com","threadId":"53180","inReplyTo":"907083995.810443848.1586362984955.JavaMail.root@zimbra39-e7","subject":"Re: [BUG] submodule move badly handled by git-rebase","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2020-04-08T16:33:50Z","receivedAt":"2020-04-08T16:34:04Z","isPatch":false,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"On Wed, Apr 8, 2020 at 9:23 AM <ydirson@free.fr> wrote:\n>\n> This may be related to another funky behaviour I just noticed, linked\n> to moving submodules around:\n>\n> - when initially created, the $TOP/orig-name submodule's git-dir gets created in\n>   $TOP/.git/modules/orig-name, with $TOP/.git/modules/orig-name/config\n>   containing a core.worktree value pointing to $TOP/orig-name\n> - when moving the submodule, only the submodule worktree is moved, the git-dir\n>   being the same $TOP/.git/modules/orig-name, where the core.worktree still\n>   points to the old location\n>\n> Other unwanted behaviour include \"git clean\" reporting (and possibly cleaning)\n> files from the wrong work tree - it took me head-scratching to understand why\n> \"git clean -fdx\" was ignoring all the cruft I had in this worktree...\n>\n> Why is it that we need a core.worktree setting at all in there ?  Removing it\n> allows \"git clean\" to do what's expected of it.  OTOH it does not make the\n> original problem go away...\n\nNot knowing much about submodules, I'm going to leave submodule issues\nthat don't touch on the merge-machinery or rebase code to someone else\nto handle. (I'd probably do the same with the merge-machinery and\nrebase side if I wasn't worried about 2.26.0 regressions in rebase and\nif I hadn't find a clever way to re-use checkout code to avoid lots of\nsubmodule issues while also deleting code in the \"ort\" merge\nstrategy).\n\nHopefully someone else on the list who knows more about submodules can\nchime in on the worktree related bits.\n"}]}