threads / discuss / 42721

Git mv -- submodule -- recursive

Subject: Git mv -- submodule -- recursive

## tl;dr

4 messages between Jun 27, 2016 and Jun 27, 2016.

replies: 3people: 2as markdown or json

Bart Bogaerts· Jun 27, 2016, 06:01 UTC · lore
With a repo structured as follows
main-files
|- submod
    |- subsubmodule
git mv submod newlocation

does not do what it is supposed to do. It actually breaks the git repository. It can be fixed easily. A complete description of the bug, including a workaround, can be found on http://stackoverflow.com/q/32782382/2274140

-- 
Bart Bogaerts
Stefan Beller· Jun 27, 2016, 16:57 UTC · re: Bart Bogaerts · lore

Re: Git mv -- submodule -- recursive

On Sun, Jun 26, 2016 at 11:01 PM, Bart Bogaerts <bartbogaerts@gmail.com> wrote:
Show 12 quoted lines
> With a repo structured as follows
>
> main-files
> |- submod
>     |- subsubmodule
>
> git mv submod newlocation
>
> does not do what it is supposed to do. It actually breaks the git repository.
> It can be fixed easily.
> A complete description of the bug, including a workaround, can be found on
> http://stackoverflow.com/q/32782382/2274140

Which version of Git are you using? I think this is fixed in a127331cd81233 (mv: allow moving nested submodules, 2016-04-19), which is first included in v2.8.3 (or v2.9 and later).

Thanks, Stefan

Show 7 quoted lines
>
> --
> Bart Bogaerts
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bart Bogaerts· Jun 27, 2016, 20:07 UTC · re: Stefan Beller · lore

Re: Git mv -- submodule -- recursive

Hi,

I tested this on git version 2.9 and it still fails (exactly the same behaviour as on the stackoverflow post; also the workarounded I posted there still works). Some output showing the bug follows below:

bartb@EB-Latitude-E5450 ~/Documents/papers $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
bartb@EB-Latitude-E5450 ~/Documents/papers $ git --version
git version 2.9.0
bartb@EB-Latitude-E5450 ~/Documents/papers $ git mv fo-c-revisited/ 2016
bartb@EB-Latitude-E5450 ~/Documents/papers $ git status
fatal: Not a git repository:
idp-latex/../../.git/modules/fo-c-revisited/modules/idp-latex
fatal: 'git status --porcelain' failed in submodule 2016/fo-c-revisited
bartb@EB-Latitude-E5450 ~/Documents/papers $ rm
2016/fo-c-revisited/idp-latex/.git
bartb@EB-Latitude-E5450 ~/Documents/papers $ git submodule update
bartb@EB-Latitude-E5450 ~/Documents/papers $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

modified: .gitmodules renamed: fo-c-revisited -> 2016/fo-c-revisited

bartb@EB-Latitude-E5450 ~/Documents/papers $
2016-06-27 19:57 GMT+03:00 Stefan Beller <sbeller@google.com>:
Show 29 quoted lines
> On Sun, Jun 26, 2016 at 11:01 PM, Bart Bogaerts <bartbogaerts@gmail.com> wrote:
>> With a repo structured as follows
>>
>> main-files
>> |- submod
>>     |- subsubmodule
>>
>> git mv submod newlocation
>>
>> does not do what it is supposed to do. It actually breaks the git repository.
>> It can be fixed easily.
>> A complete description of the bug, including a workaround, can be found on
>> http://stackoverflow.com/q/32782382/2274140
>
> Which version of Git are you using?
> I think this is fixed in a127331cd81233 (mv: allow moving nested
> submodules, 2016-04-19), which is first included in v2.8.3
> (or v2.9 and later).
>
> Thanks,
> Stefan
>
>>
>> --
>> Bart Bogaerts
>> --
>> To unsubscribe from this list: send the line "unsubscribe git" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
-- 
Bart Bogaerts
Stefan Beller· Jun 27, 2016, 21:20 UTC · re: Bart Bogaerts · lore

Re: Git mv -- submodule -- recursive

On Mon, Jun 27, 2016 at 1:07 PM, Bart Bogaerts <bartbogaerts@gmail.com> wrote:
Show 5 quoted lines
> Hi,
>
> I tested this on git version 2.9 and it still fails (exactly the same
> behaviour as on the stackoverflow post; also the workarounded I posted
> there still works).

I see. the commit I referenced was solving a slightly different problem, than what we do here. That commit only fixed the issue for submodules in a nested directory.

The important detail what is different in this case is having another nested submodule.

If you only had
- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
(quoted from SO)

then `git mv c 2015/` is expected to work as well as `mkdir d && git mv 2015 d/` with submodule b being nested in 2015.

but as you have a submodule inside of c, moving c is buggy.
Stefan

← back to recent threads