git – echa un vistazo a la twig y los submodules

¿Qué funciones puedo usar para sincronizar / iniciar / actualizar todos los submodules (repository local) a la versión en una twig remota?

La "synchronization" (llamémoslo así, no me refiero a git sync!) También debe funcionar cuando:

  • Se ha agregado un submodule solo a la twig remota
  • Los files dentro de un submodule se han agregado / eliminado / modificado localmente. Rastreado o sin seguimiento.
  • Los submodules se eliminan (opcional)

Esencialmente, quiero que el repository local siempre esté exactamente en la misma versión que la twig remota. Sin mucho tiddling cada vez que cambio algo en los submodules. Así que no hay instrucciones manuales para el server para iniciar un nuevo submodule, solo para que el script de implementación funcione …

¿Se puede lograr esto sin clonar (es decir, transferir) todo el repository? Elegí git para tener una forma segura y rápida de implementar mis fonts. Pero la única opción que puedo pensar es hacer un git clone --recursive completo de git clone --recursive y verificar los submodules en sus respectivas tags a continuación. En ese caso, rsync probablemente haría un mejor trabajo de synchronization de files.

¿Qué pasa con la git submodule update --init --recursive ? Actualizará el submodule a la confirmación correcta, lo inicializará si es necesario y lo hará para todos los submodules, incluso cuando se encuentren dentro de otros submodules. Si eso no descarta los cambios, intente con git submodule foreach --recursive git reset --hard primero.

Primero, agregue y revise manualmente los submodules necesarios en la location y versión que desee. Para actualizar todos los submodules, pero mantener su respectiva versión que está desprotegida en el repository que los contiene , se puede usar

 git submodule update --init --recursive --rebase --force 

La --rebase hará que git compruebe la confirmación exacta, que el submodule está desprotegido en el repository contenedor.

Esto fallará si el repository local tiene cambios realizados en los files del submodule, por lo que debemos restablecer todos los submodules primero. Para el uso de scripts:

 git submodule foreach 'git reset --hard && git checkout . && git clean -fdx' git submodule update --init --recursive --rebase --force 

Los commands de reinicio se tomaron directamente de git deshacer todos los cambios no confirmados . Avíseme si algo más es más apropiado para este uso.

No se requieren configuraciones adicionales, solo revisa el submodule @ commit o label deseada e inserta ese cambio en el contenedor repo.

Estos commands satisfacen mis primeros 2 requisitos iniciales: siempre que git rastree el submodule, todos los cambios están completamente sincronizados con los "clientes" que ejecutan los commands. Si se elimina un submodule, git clean se puede ejecutar en el repository que contiene los submodules para eliminar los files del submodule orohaned.