Pregunta

¿Es posible que un submódulo git a ser de varios otros submódulos git, y el repositorio Git súper para ir a buscar el contenido de cada submódulo?

He tratado de hacer esto utilizando el enfoque obvio / ingenua de la creación de un repositorio git que sostiene varios submódulos.

A continuación, la adición de este repositorio git a otro repositorio git como un submódulo.

A continuación, intentar tirar desde el directorio raíz de la cesión temporal súper git por git submodule init y luego git submodule update. Pero esto no funciona a buscar a los sub-submódulos.

¿Fue útil?

Solución

Como se mencionó en Retrospectivamente añadir --recursive a un repositorio git

git submodule update --init --recursive

debería funcionar.

Otros consejos

Sridhar comentarios a continuación, a partir de Git1.6.5 +, git clone --recursive es ahora la alternativa oficial, se describe en:

inamiy , a cabo el comando git submodule update --init --recursive, introducido en cometer b13fd5c, de nuevo en GIT1. 6,5, por Johan Herland (jherland) .

IceFire añade en los comentarios :?

  

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


(mayor respuesta original)

De acuerdo con la de página manual

 git submodule update --recursive

debería actualizar ninguna submódulos anidados. Pero la parte de inicio no puede ser recursivo.

Dependiendo de la versión de Git, se podría caer de nuevo a un enfoque más "scripting", con este artículo recursivamente actualización de Git submódulos que permite recursiva actualización init y:

#!/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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top