Wie Sridhar Kommentare unten, von Git1.6.5 +, git clone --recursive
ist jetzt die offizielle Alternative, beschrieben in:
inamiy korrekt points out der Befehl git submodule update --init --recursive
, eingeführt in commit b13fd5c, wieder in git1.6.5, von Johan Herland (jherland
).
Und IceFire fügt in the comments:
Wenn Sie nur ein Modul eines Submoduls zur Kasse möchten, dann
git submodule update --init <submoduleName>
ist der Weg zu gehen.
(ältere ursprüngliche Antwort)
der Nach manual page
git submodule update --recursive
sollten alle verschachtelten Submodule aktualisieren. Aber der Init-Teil darf nicht rekursiv sein.
Je nach Ihrer Version von Git, könnten Sie zu einem "Scripting" Ansatz zurückgreifen, mit diesem Artikel Recursively Updating Git Submodules die für rekursive init und Update ermöglicht:
#!/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);
}
Das hat für mich funktioniert. Beachten Sie, dass ich fälschlicherweise dachte, dass "git Submodul init; git submodule update --recursive' war gleichbedeutend mit dem oben genannten, ist es aber nicht. – jsdalton
+1 Ich mag das viel besser als das, was ich verwendet habe: git submodul foreach git submodul init ... dann git submodul update - rekursiv –
Leider funktionierte das nicht für mich. Keine Fehler, keine Nachrichten, nichts. –