Cambiar el nombre de un submodule git

¿Existe alguna manera fácil de cambiar el nombre de un directory de submodules de git (que no sea el hecho de pasar por todo el movimiento de eliminarlo y volver a agregarlo con un nuevo nombre de destino).

Y mientras estamos en esto, ¿por qué es que simplemente no puedo hacer lo siguiente en el directory padre: git mv old-submodule-name new-submodule-name

Encontré que el siguiente flujo de trabajo funciona:

  • Actualizar .gitmodules
  • mv oldpath newpath
  • git rm oldpath
  • git add newpath
  • git submodule sync

Git1.8.5 (octubre de 2013) debería simplificar el process . Simplemente haz un:

 git mv AB 

" git mv AB ", cuando se mueve un submodule A se le ha enseñado a reubicar su tree de trabajo y a ajustar las routes en el file .gitmodules .


Ver más en commit 0656781fadca1 :

Actualmente el uso de " git mv " en un submodule mueve el tree de trabajo del submodule en el del superproyecto. Pero la configuration de ruta del submodule en .gitmodules queda intacta, lo cual es ahora inconsistente con el tree de trabajo y hace que los commands git que dependen de la path -> name mapping correcta path -> name mapping (como el status y la diff ) se comporten de manera extraña.

Deje que " git mv " ayude aquí no solo moviendo el tree de trabajo del submodule, sino también actualizando la configuration " submodule.<submodule name>.path " del file .gitmodules y etapa ambos.
Esto no ocurre cuando no se encuentra un file .gitmodules y solo emite una advertencia cuando no tiene una sección para este submodule. Esto se debe a que el usuario puede simplemente usar gitlinks simples sin el file .gitmodules o ya ha actualizado manualmente la ruta de acceso antes de emitir el command "git mv" (en cuyo caso la advertencia le restring que mv lo habría hecho por él).
Solo cuando se encuentra .gitmodules y contiene conflictos de fusión, el command mv fallará y le pedirá al usuario que resuelva el conflicto antes de volver a intentarlo.


git 2.9 (junio de 2016) mejorará git mv para submodule:

Ver commit a127331 (19 de abril de 2016) por Stefan Beller ( stefanbeller ) .
(Fusionado por Junio ​​C Hamano – gitster – in commit 9cb50a3 , 29 de abril de 2016)

mv : permitir el movimiento de los submodules nesteds

" git mv old new " no ajustó correctamente la ruta para un submodule que vive como un subdirectory dentro de old/ directory.

sin embargo, los submodules necesitan actualizar su enlace al directory git así como las actualizaciones del file .gitmodules .

 $ mv submodule-oldpath submodule-newpath $ git rm submodule-oldpath $ git add submodule-newpath $ git submodule sync 

Esta solución no me funciona porque al usar el command git add, el submodule se incluyó en el proyecto como un directory simple y no como un submodule.

la solución correcta es:

 $ mv submodule-oldpath ~/another-location $ git rm submodule-oldpath $ git submodule add submodule-repository-URL submodule-newpath 

Fuente: http://bcachet.github.io/development/2012/05/25/rename-git-submodule/

Acabo de probar algunos de los sugeridos anteriormente. Estoy corriendo:

 $ git --version git version 1.8.4 

Descubrí que era mejor desinstalar el submodule, eliminar el directory y crear un nuevo submodule.

 git submodule deinit <submodule name> git rm <submodule folder name> git submodule add <address to remote git repo> <new folder name> 

Al less eso es lo que mejor funcionó para mí. YMMV!

Edite el file .gitmodules para cambiar el nombre del submodule y luego cambie el nombre del directory del submodule.

Creo que es posible que necesites hacer una git submodule sync después, pero no estoy en condiciones de verificarlo ahora.

No es posible cambiarle el nombre, por lo que debe eliminarlo primero ( deinit ) y agregarlo nuevamente.

Entonces, después de eliminarlo:

 git submodule deinit <path> git rm --cached <path> 

también puede verificar y eliminar las references en:

  • .gitmodules
  • .git/config
  • elimine la carpeta de reference de .git/modules/<name> (lo mejor es hacer una copy de security), ya que cada carpeta tiene un file de config donde guarda la reference a su worktree

Luego, organice sus cambios mediante la realización de cambios en su repository de la siguiente manera:

 git commit -am 'Removing submodule.' 

y verifique si no tiene problemas pendientes al:

 git submodule update git submodule sync git submodule status 

así que ahora puedes agregar el submodule git nuevamente:

 git submodule add --name <custom_name> git@github.com:foo/bar.git <my/path>