¿Cómo reemplazo un submódulo de git con un repositorio de git diferente?
Específicamente, tengo un submódulo:
- ubicado en
./ExternalFrameworks/TestFramework
eso 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:
.gitmodule
archivo para usar la nueva URLrm -rf .git/modules/<submodule>
rm -rf <submodule>
git submodule sync
git submodule update
Se puede encontrar información más completa en otro lugar:
fuente
rm -rf .git/modules/<submodule>
antes de que funcionara para mí.git submodule sync
despué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:
.gitmodules
archivo.git/config
git rm --cached path_to_submodule
(sin barra al final)Ahora, agregue el nuevo submódulo con la
--name
bandera. Esto le dará a git un nombre alternativo para hacer referencia.git/config
al 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-keep
Estos 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
.gitmodules
manualmente 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
.gitmodules
archivo 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 sync
ya que se restablecerá a la URL predeterminada nuevamente.fuente