Git: рекурсивное перемещение подмодулей (вложенные подмодули)

У меня следующая структура мерзавца

- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
--- git-submodule d

Я хотел бы переместить подмодуль git c в папку 2015. Мне известны «грязные способы» сделать это (которые включают изменение .git / config и изменение gitdir в нескольких файлах в файлах .git / modules).

Я недавно прочитал, что git mv должен быть в состоянии сделать это, то есть запустить

git mv c 2015/

Это прекрасно работает для репозиториев, в которых нет вложенного подмодуля (d в моем случае). Тем не менее, когда я запускаю эту команду в моем каталоге, я получаю ошибки, такие как

fatal: Not a git repository: d/../../.git/modules/c/modules/d
fatal: 'git status --porcelain' failed in submodule 2015/c

(обратите внимание, эта ошибка возникает в состоянии git после выполнения вышеупомянутого перемещения)

Кто-нибудь знает о чистом методе, чтобы сделать этот шаг (то есть, тот, который не предполагает ручного изменения путей в файлах .git / modules)?

Изменить: (10/10/2015)

Мое лучшее на данный момент решение, которое не включает в себя модификации каких-либо файлов конфигурации git: (сначала убедитесь, что все изменения в d были зафиксированы и отправлены куда-то)

rm c/d -rf
git mv c 2015
cd 2015/c
git submodule update

Изменить: (10/10/2015)

Еще менее навязчивый обходной путь

git mv c 2015
rm 2015/c/d/.git
cd 2015/c
git submodule update

Изменить: (21/9/2018)

Начиная с версии git 2.19. Это было исправлено иgit mv ведет себя как ожидалось.

Ответы на вопрос(2)

Ваш ответ на вопрос