Git: movendo submódulos recursivamente (submódulos aninhados)
Eu tenho a seguinte estrutura git
- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
--- git-submodule d
Gostaria de mover o submódulo git c para a pasta 2015. Conheço "maneiras sujas" de fazer isso (que envolvem modificar .git / config e alterar o gitdir em vários arquivos nos arquivos .git / modules)
Li recentemente que o git mv deve ser capaz de fazer isso, ou seja, executando
git mv c 2015/
Isso funciona bem para repositórios nos quais não há submódulo aninhado (d no meu caso). No entanto, quando executo esse comando no meu diretório, estou recebendo erros como
fatal: Not a git repository: d/../../.git/modules/c/modules/d
fatal: 'git status --porcelain' failed in submodule 2015/c
(observe, esse erro ocorre no status git após a execução da movimentação mencionada acima)
Alguém está ciente de um método limpo para fazer essa mudança (ou seja, um método que não envolva a alteração manual de caminhos nos arquivos .git / modules)?
Edição: (6/10/2015)
Minha melhor solução atual que não envolve modificações em nenhum dos arquivos de configuração do git é (primeiro verifique se todas as alterações em d foram confirmadas e enviadas para algum lugar)
rm c/d -rf
git mv c 2015
cd 2015/c
git submodule update
Edição: (8/10/2015)
Uma solução alternativa ainda menos invasiva
git mv c 2015
rm 2015/c/d/.git
cd 2015/c
git submodule update
Edição: (21/9/2018)
Desde a versão 2.19 do git. Isso foi corrigido egit mv
comporta-se como esperado.