ดังที่Sridharแสดงความคิดเห็นด้านล่างจาก Git1.6.5 + git clone --recursive
ตอนนี้เป็นทางเลือกอย่างเป็นทางการที่อธิบายไว้ใน:
inamiyอย่างถูกต้องชี้ให้เห็นgit submodule update --init --recursive
คำสั่งนำมาใช้ในการกระทำ b13fd5cอีกครั้งใน git1.6.5 โดยโยฮัน Herland (jherland
)
และIceFireเพิ่มในความคิดเห็น :
หากคุณต้องการชำระเงินเพียงโมดูลย่อยของโมดูลย่อยเดียว
git submodule update --init <submoduleName>
นั่นคือวิธีที่จะไป
(คำตอบเดิมที่เก่ากว่า)
ตามหน้าคู่มือ
git submodule update --recursive
ควรอัปเดตโมดูลย่อยที่ซ้อนกัน แต่ส่วนเริ่มต้นอาจไม่สามารถเรียกซ้ำได้
ขึ้นอยู่กับเวอร์ชันของ Git ของคุณคุณสามารถถอยกลับไปใช้วิธีการ "สคริปต์" ได้มากขึ้นด้วยบทความนี้การอัปเดตโมดูลย่อย Gitแบบเรียกซ้ำซึ่งช่วยให้สามารถเริ่มต้นและอัปเดตซ้ำ
#!/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);
}