2010-11-23 27 views
50

Si git clone con --recursive, puede obtener todos los submódulos de git también.Retrospectivamente add --recursive a un git repo

Si he olvidado agregar esta bandera mágica al clonar, como puede pasar, ¿cómo puedo obtener submódulos?

Además, ¿cómo puedo configurar el indicador recursivo como predeterminado para clones futuros?

Respuesta

59

Usted puede hacerlo con esto después de un simple clon de nivel superior:

git submodule update --init --recursive 

yo no recomendaría hacer clon de hacer esto por defecto. La forma correcta de hacerlo si usa los submódulos de forma agresiva para el desarrollo y no solo vincula a libs de OSS de terceros en github que puede actualizar una vez en una luna azul, es usar git slave o subtree.

Espero que esto ayude.

1

IIRC, git submodule init, git submodule update

Por desgracia, no veo una opción para habilitar recursiva por defecto, sin embargo.

+0

Siempre se puede crear un alias de concha o Git que realiza un clon recursiva. Sin embargo, puede parecer más difícil hacerlo en dos pasos aquí, pero de esta manera puede cambiar las direcciones URL de los repositorios de submódulos en el archivo de configuración después del 'init' pero antes de la' actualización'. Debe hacer esto para algunos repositorios donde los submódulos se han configurado con la url para el repositorio privado y debe cambiarlos a las urls públicas. – Abizern

7
  1. Desde la raíz de tu repositorio:

    $ git submodule update --init --recursive 
    

    que actualizará cualquiera y todos los submódulos registrados, la inicialización de ellos si es necesario que el valor que se encuentra en el archivo .gitmodules, y también recursivamente en submódulos complejos (unos con submódulos propios) e inicializarlos y actualizarlos también.

  2. La forma más sencilla que conozco para hacer la clonación de forma recursiva el valor por defecto sería la sombra git clone con un alias

    $ git config --global alias.clone = 'clone --recursive' 
    

    En cuanto a la adición de opciones siempre, creo que es el método idiomática.

+1

En lugar de sombrear el comando 'clonar' sugiero agregar un comando de variante '$ git config --global alias.cloner = 'clon --recursive'' – Abizern

+7

Ambos necesitan eliminar la marca' = ':' git config - clon 'alias.clone' global --recursive'' – ELLIOTTCABLE

+2

NOTA: esta respuesta es *** completamente incorrecta ***. git no le permitirá "alias sombra" un comando git existente. El 'alias.clone' será completamente ignorado. – Jez