Si clonaste un repositorio Git en tu Mac y sus carpetas de submódulos están vacías, abre Terminal, ve al repositorio y ejecuta git submodule update --init --recursive. Esto inicializa los submódulos registrados por el proyecto, descarga los commits que especifica el repositorio principal y también gestiona los submódulos anidados. Necesitas tener Git instalado y acceso al repositorio remoto de cada submódulo.
Ejecuta el comando de inicialización en el repositorio clonado
Abre Terminal y usa cd para entrar en el directorio creado por git clone. Si el nombre del directorio contiene espacios, ponlo entre comillas; por ejemplo:
cd "$HOME/Projects/My Project"
git submodule update --init --recursive
Reemplaza la ruta de ejemplo con la ubicación real de tu clon. También puedes escribir cd , arrastrar la carpeta del repositorio desde Finder hasta la ventana de Terminal para insertar su ruta y presionar Return. Apple documenta Terminal como la interfaz de línea de comandos de macOS e identifica a zsh como su shell predeterminado; los comandos anteriores utilizan una sintaxis de shell ordinaria que funciona en zsh. Abrir o salir de Terminal en Mac, Cambiar el shell predeterminado en Terminal en la Mac
La documentación oficial de Git explica que --init inicializa los submódulos que no han sido inicializados, mientras que --recursive también actualiza los submódulos anidados. update obtiene los commits faltantes y descarga la revisión esperada por el repositorio principal. Documentación de git-submodule
Comprueba si los submódulos se inicializaron
Para ver lo que registra el repositorio principal, ejecuta:
git submodule status --recursive
Una línea de estado de un submódulo normalmente muestra un ID de commit y una ruta. Un signo menos al principio significa que ese submódulo no está inicializado; un signo más significa que el commit descargado difiere del commit registrado por el repositorio principal; y U indica un conflicto. La opción de estado recursivo también informa sobre los submódulos anidados. Documentación de git-submodule
Si la salida muestra rutas con signos menos, vuelve a ejecutar el comando de inicialización desde el directorio raíz del repositorio. Si no aparece ningún submódulo, comprueba si el clon actual contiene realmente un archivo .gitmodules y si te encuentras en el repositorio previsto. Es posible que un repositorio no tenga submódulos o que el commit que clonaste no registre ninguno.
Comprende qué revisión se descarga
Un submódulo es su propio repositorio Git, y el repositorio principal registra un commit específico para él. El comportamiento habitual de update descarga ese commit registrado, dejando comúnmente al submódulo en un HEAD desacoplado (detached HEAD). Esto es lo previsto cuando estás configurando el proyecto principal: reproduce la versión seleccionada por el repositorio principal. Git - Submódulos, Documentación de git-submodule
Por esa razón, no agregues --remote cuando tu objetivo sea simplemente inicializar el clon. Esa opción utiliza la rama de seguimiento remoto del submódulo en lugar del commit registrado por el principal, lo que puede dar como resultado una versión diferente. Si tienes la intención de desarrollar dentro de un submódulo, primero infórmate sobre el flujo de trabajo del proyecto; cambiar a una rama o hacer commits dentro de él es un proceso independiente de su inicialización.
Si el comando falla
Las actualizaciones de los submódulos necesitan conectarse con los repositorios remotos listados en la configuración del proyecto, por lo que un fallo de red o la falta de acceso pueden impedir la descarga. Los submódulos privados pueden requerir que te autentiques en el servicio de alojamiento o que dispongas de permisos para el repositorio. Si Git informa que no puede encontrar un repositorio o resolver un host, confirma tu conexión de red y tus permisos de acceso, y vuelve a intentarlo.
Si un proyecto cambió recientemente la URL de un submódulo, git submodule sync --recursive puede sincronizar la configuración local de las URL a partir de .gitmodules; a continuación, ejecuta git submodule update --init --recursive. Git documenta sync para actualizar la configuración de URL de los submódulos que ya están inicializados o recién agregados. Documentación de git-submodule
Si ya tienes trabajo local dentro de un submódulo, revísalo antes de forzar cualquier actualización o cambiar de revisión. El comando de inicialización estándar no le pide a Git que fuerce la descarga sobrescribiendo los cambios locales; resuelve o preserva ese trabajo deliberadamente en lugar de eliminar el directorio como un atajo para solucionar problemas.
Una vez que git submodule status --recursive muestre los ID de commit esperados sin signos menos al principio, se habrán descargado las revisiones de los submódulos registradas por el repositorio. Continúa trabajando desde el repositorio principal, a menos que las instrucciones del proyecto requieran trabajar de forma independiente dentro de un submódulo.