Como substituo um submódulo git por um repo git diferente?
Especificamente, tenho um submódulo:
- localizado em
./ExternalFrameworks/TestFramework
naquele ponto para um repo git[email protected]:userA/TestFramework.git
- Eu gostaria agora de apontar para
[email protected]:userB/TestFramework.git
.
O problema é que quando eu deleto o submódulo com o método descrito aqui , então o adiciono novamente usando o comando
git submodule add [email protected]:userB/TestFramework.git
Eu recebo este erro:
A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
origin [email protected]:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
[email protected]:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
git
git-submodules
joseph.hainline
fonte
fonte
Respostas:
Se a localização (URL) do submódulo mudou, você pode simplesmente:
.gitmodule
arquivo para usar o novo URLrm -rf .git/modules/<submodule>
rm -rf <submodule>
git submodule sync
git submodule update
Informações mais completas podem ser encontradas em outro lugar:
fonte
rm -rf .git/modules/<submodule>
isso antes de funcionar para mim.git submodule sync
depois derm -rf .git/modules/<submodule>
darfatal: Not a git repository: ../.git/modules/<submodule>
. Alguma dica? Eu inicialmente criei o submódulo via degit submodule add https://<submodule-url>
acordo com os documentos do git ...Primeiro, exclua o submódulo atual com o método já mencionado aqui , que estou incluindo por conveniência:
.gitmodules
arquivo.git/config
git rm --cached path_to_submodule
(sem barra final)Agora, adicione o novo submódulo com a
--name
bandeira. Isso dará ao git um nome alternativo para fazer referência.git/config
ao submódulo, para desconsiderar o submódulo que estava lá historicamente, que você ainda deseja trabalhar em seu histórico anterior.Então digite:
e você terá o submódulo carregado no caminho que você espera.
fonte
.git/modules/<path_to_submodule>
.--name
. Eu não estava ciente dos problemas relacionados a isso e não fui capaz de substituir um submódulo até que fiz uso desta opção (graças à sua resposta).git submodule add --name old-name-to-keep [email protected]:userB/new-repository.git old-name-to-keep
Esses comandos farão o trabalho no prompt de comando sem alterar nenhum arquivo no repositório local.
fonte
O que consertou isso para mim foi na raiz do seu repositório git (não no submódulo), execute
Então você deve ser capaz de adicionar normalmente.
fonte
A maneira mais fácil que encontrei é esta:
Não gostei da ideia de modificar o meu
.gitmodules
manualmente. Eu também escrevi uma pequena postagem no blog sobre isso.fonte
Se você deseja alterar o URL remoto apenas para este clone :
Isso não afetará o
.gitmodules
arquivo no projeto pai, portanto não será propagado para outros desenvolvedores.Isso é descrito como "alterações de registro específicas do usuário" aqui .
Não execute,
git submodule sync
pois isso redefinirá para o URL padrão novamente.fonte