git子模塊是否可以由其他幾個git子模塊構成,以及用於獲取每個子模塊內容的超級git回購?子模塊內部的Git子模塊(嵌套子模塊)
我試圖做到這一點,使用明顯/天真的方式創建一個持有幾個子模塊的git倉庫。
然後添加這個git回購到另一個git回購作爲子模塊。
然後嘗試從超級git回購的根目錄git submodule init
然後git submodule update
。但是這不能獲取子子模塊。
git子模塊是否可以由其他幾個git子模塊構成,以及用於獲取每個子模塊內容的超級git回購?子模塊內部的Git子模塊(嵌套子模塊)
我試圖做到這一點,使用明顯/天真的方式創建一個持有幾個子模塊的git倉庫。
然後添加這個git回購到另一個git回購作爲子模塊。
然後嘗試從超級git回購的根目錄git submodule init
然後git submodule update
。但是這不能獲取子子模塊。
如Sridhar下面的評論,從Git1.6.5 +,git clone --recursive
現在是正式的替代,在所描述:
git clone --submodule
」--recursive
to a git repo」 alias $ git config --global alias.cloner = 'clone --recursive'
,這避免了遮蔽正常的git clone
命令)inamiy正確points outgit submodule update --init --recursive
命令,在commit b13fd5c中引入,再次在git1.6.5中,由Johan Herland (jherland
)引入。
如果你想只檢出一個子模塊的子模塊,那麼
git submodule update --init <submoduleName>
是要走的路。
(舊的原來的答案)
git submodule update --recursive
應該更新任何嵌套子模塊。但init部分可能不是遞歸的。
根據您的Git版本,你可以回落到一個更「腳本」的方法,這篇文章Recursively Updating Git Submodules它允許遞歸的初始化和更新:
#!/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);
}
「git clone --recursive」是否足夠? – 2011-01-12 21:13:06
@Sridhar:這是克隆,如http://stackoverflow.com/questions/3796927/git-clone-submodule和http://stackoverflow.com/questions/4251940/retrospectively-add-recursive-to中提到的-a-git-repo/4261001#4261001,來自Git1.6.5及更高版本。我編輯了我的答案以反映這一點。 – VonC 2011-01-12 21:19:24
注意:如果您只想簽出一個子模塊的一個子模塊,那麼'git submodule update --init
這對我有用。請注意,我錯誤地認爲'git submodule init; git submodule update --recursive'是上面的同義詞,但事實並非如此。 – jsdalton 2012-03-21 16:43:12
+1我喜歡這個比我使用的要好得多:git submodule foreach git submodule init ...然後git submodule update --recursive – 2012-03-27 14:19:18
不幸的是,這並不適用於我。沒有錯誤,沒有消息,什麼都沒有。 – 2014-02-10 15:50:43