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
ведет себя как ожидалось.