¿Cómo reemplazo un submódulo de git con un repositorio de git diferente?
Específicamente, tengo un submódulo:
- ubicado en
./ExternalFrameworks/TestFrameworkeso apunta a un repositorio de git[email protected]:userA/TestFramework.git - Me gustaría que ahora apunte
[email protected]:userB/TestFramework.git.
El problema es que cuando elimino el submódulo con el método descrito aquí , lo vuelvo a agregar usando el comando
git submodule add [email protected]:userB/TestFramework.git
Me sale este error:
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
fuente
fuente

Respuestas:
Si la ubicación (URL) del submódulo ha cambiado, simplemente puede:
.gitmodulearchivo para usar la nueva URLrm -rf .git/modules/<submodule>rm -rf <submodule>git submodule syncgit submodule updateSe puede encontrar información más completa en otro lugar:
fuente
rm -rf .git/modules/<submodule>antes de que funcionara para mí.git submodule syncdespués derm -rf .git/modules/<submodule>darfatal: Not a git repository: ../.git/modules/<submodule>. ¿Algun consejo? Inicialmente creé el submódulo a través degit submodule add https://<submodule-url>los documentos de git ...Primero, elimine el submódulo actual con el método ya mencionado aquí , que incluyo por conveniencia:
.gitmodulesarchivo.git/configgit rm --cached path_to_submodule(sin barra al final)Ahora, agregue el nuevo submódulo con la
--namebandera. Esto le dará a git un nombre alternativo para hacer referencia.git/configal submódulo, para desconfigurar con el submódulo que estuvo allí históricamente, que aún desea trabajar en su historial anterior.Así que escribe:
y obtendrá el submódulo cargado en la ruta que espera.
fuente
.git/modules/<path_to_submodule>.--name. No estaba al tanto de los problemas relacionados con esto y no pude reemplazar un submódulo hasta que hice uso de esta opción (gracias a su respuesta).git submodule add --name old-name-to-keep [email protected]:userB/new-repository.git old-name-to-keepEstos comandos harán el trabajo en el símbolo del sistema sin alterar ningún archivo en el repositorio local.
fuente
Lo que solucionó esto para mí fue en la raíz de su repositorio git (no en el submódulo), ejecute
Entonces debería poder agregar normalmente.
fuente
La forma más fácil que encontré es esta:
No me gustó la idea de modificar
.gitmodulesmanualmente mi . También escribí una pequeña entrada de blog al respecto.fuente
Si desea cambiar la URL remota solo para este clon :
Esto no afectará al
.gitmodulesarchivo del proyecto principal, por lo que no se propagará a otros desarrolladores.Esto se describe como "cambios de registro específico del usuario" aquí .
No lo ejecute,
git submodule syncya que se restablecerá a la URL predeterminada nuevamente.fuente