Cómo hacer staging (git add) de todos los cambios y archivos nuevos excepto los repositorios incrustados?
Trabajo mucho con sourcetree y cuando hago staging ahí, no incluye los repositorios incrustados. No sé cómo lo hacen, pero eso es lo que me gustaría lograr a través de la línea de comandos. Leí la documentación de git add
aquí (https://git-scm.com/docs/git-add) pero no encontré nada que logre esto. Podría implementarlo con un script de bash, pero me preguntaba si tal vez me estaba perdiendo algo y hay una forma más sencilla de hacerlo.
Por cierto, no quisiera resolver esto con un comando que requiera escribir el nombre exacto de los repositorios incrustados, ya que tengo muchos repositorios de manifiesto como este y estoy buscando una solución genérica.
EDIT: Aquí te explico cómo reproducirlo tú mismo: crea cualquier repositorio de git y dentro de él crea otro repositorio de git. Ve al repositorio principal y ejecuta git add .
y verás que git te da el siguiente mensaje:
+++++++++++++++++++
El contexto:
Tengo un repositorio que contiene varios otros repositorios incrustados. Gestiono todos los repositorios incrustados mediante un archivo de manifiesto (un archivo de texto que enumera cada repositorio y su commit y rama asociados) y cuando quiero sincronizarlos, simplemente hago checkout de las ramas y commits relevantes basados en el archivo de manifiesto usando un script de bash que escribí. Estoy desarrollando una aplicación que implementa una solución de gestión multi-repo que combina características de los submódulos y el repositorio de Google con la adición de una interfaz gráfica de usuario. Por eso es que no estoy usando submódulos aquí a propósito.
davy.ai
Solución para Establecer Repositorios Incrustados en Git
Cuando se utiliza Sourcetree, el proceso de establecer no incluye repositorios incrustados. El usuario desea lograr el mismo resultado a través de la línea de comandos sin tener que escribir el nombre exacto de los repositorios incrustados, ya que tienen muchos repositorios de manifiesto de este tipo y están buscando una solución genérica. Aquí está una solución para establecer repositorios incrustados en Git:
El comando
git add
no incluye repositorios incrustados de forma predeterminada. Sin embargo, utilizando la bandera--recurse-submodules
congit add
, los repositorios incrustados también serán añadidos. El comando para hacerlo es:git add --all --recurse-submodules
Este comando establecerá todos los cambios, incluyendo submódulos (es decir, repositorios incrustados), e ignorará archivos no rastreados.
Además, puedes configurar el valor de la opción
status.submoduleSummary
entrue
para mostrar el estado de los submódulos en la salida del comandogit status
:git config --global status.submoduleSummary true
Esto te dará un resumen del estado del submódulo junto al estado del repositorio padre.
Es importante tener en cuenta que al enviar los cambios a un repositorio remoto, también debes enviar los cambios a los submódulos por separado (utilizando
git push --recurse-submodules=on-demand
).En resumen, ejecutar
git add --all --recurse-submodules
establecerá todos los cambios, incluyendo los cambios realizados en los repositorios incrustados.