fir*_*der 129 git git-submodules
git子模块是否有可能由其他几个git子模块组成,而超级git repo可以获取每个子模块的内容?
我尝试使用显而易见的/天真的方法来创建一个包含多个子模块的git repo.
然后将此git repo添加到另一个git repo作为子模块.
然后尝试从超级git仓库的根目录拉出git submodule init然后git submodule update.但这无法获取子子模块.
ina*_*miy 191
正如Retrospectively中提到的那样 - 在git repo中添加--recursive
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
应该管用.
Von*_*onC 53
正如Sridhar在下面评论的那样,从Git1.6.5 +开始,git clone --recursive现在是官方替代品,描述如下:
git clone --submodule"--recursive到git repo " alias $ git config --global alias.cloner = 'clone --recursive',避免影响正常git clone命令)inamiy正确地指出的git submodule update --init --recursive命令,在引入提交b13fd5c,再次在git1.6.5,由约翰她乡(jherland).
如果您只想检查子模块的一个子模块,那么
git submodule update --init <submoduleName>就是要走的路.
(较旧的原始答案)
根据手册页
git submodule update --recursive
Run Code Online (Sandbox Code Playgroud)
应该更新任何嵌套的子模块.但init部分可能不是递归的.
根据您的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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40916 次 |
| 最近记录: |