Như Sridhar bình luận bên dưới, từ Git1.6.5 +, git clone --recursive
hiện là lựa chọn chính thức, được mô tả trong:
inamiy một cách chính xác chỉ ra các git submodule update --init --recursive
lệnh, được giới thiệu trong phạm b13fd5c , một lần nữa trong git1.6.5, bởi Johan HERLAND ( jherland
) .
Và IceFire thêm vào trong các ý kiến :
Nếu bạn muốn kiểm tra chỉ một mô hình con của mô hình con, thì đó
git submodule update --init <submoduleName>
là cách để đi.
(câu trả lời gốc cũ hơn)
Theo trang hướng dẫn
git submodule update --recursive
nên cập nhật bất kỳ mô hình con lồng nhau. Nhưng phần init có thể không được đệ quy.
Tùy thuộc vào phiên bản Git của bạn, bạn có thể quay lại cách tiếp cận "kịch bản" hơn, với bài viết này Cập nhật đệ quy các Submodules cho phép khởi tạo và cập nhật đệ quy:
#!/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);
}