ver submodulos submodule guardar español ejemplos credenciales configurar configuracion colores git git-submodules

git - submodule - submodulos



Submódulo de Git dentro de un submódulo(submódulos anidados) (2)

¿Es posible que un submódulo git esté formado por varios otros submódulos de git y el super git repo para obtener los contenidos de cada submódulo?

Intenté hacer esto usando el enfoque obvio / ingenuo de crear un repo git que contenga varios submódulos.

Luego agregando este git repo a otro git repo como un submódulo.

Luego, tratando de extraer del directorio raíz del repo super git mediante el git submodule init y luego la git submodule update . Pero esto no logra recuperar los submódulos secundarios.


Como comenta Sridhar continuación, desde Git1.6.5 +, git clone --recursive es ahora la alternativa oficial, descrita en:

señala correctamente la git submodule update --init --recursive , introducido en commit b13fd5c , nuevamente en git1.6.5, por Johan Herland ( jherland ) .

Y IceFire agrega en los comentarios :

Si desea consultar solo un submódulo de un submódulo, entonces
git submodule update --init <submoduleName> es el camino a seguir.

(respuesta original más antigua)

De acuerdo con la página del manual

git submodule update --recursive

debería actualizar cualquier submódulo anidado. Pero la parte init puede no ser recursiva.

Dependiendo de su versión de Git, podría recurrir a un enfoque más "de secuencias de comandos", con este artículo Actualización recursiva de submódulos de Git, que permite el inicio y la actualización recursivos:

#!/usr/bin/perl use strict; use Cwd; init_and_update(); exit; sub init_and_update { my $start_path = cwd(); my %paths; my $updated; do { my $data = `find . -name ''.gitmodules''`; chomp($data); $data =~ s////.gitmodules//g; foreach my $path (split(//n/, $data)) { $paths{$path} = '''' if($paths{$path} eq ''''); } $updated = 0; foreach my $path (sort keys %paths) { if($paths{$path} eq '''') { chdir($path); `git submodule init 2>&1`; `git submodule update 2>&1`; chdir($start_path); if($ARGV[0] eq ''--remove-gitmodules'') { unlink("$path/.gitmodules"); } $paths{$path} = 1; $updated++; } } } while($updated); }