하위 모듈 내부의 git 하위 모듈 (중첩 하위 모듈)
-
20-09-2019 - |
문제
GIT 서브 모듈이 다른 여러 git 하위 모듈로 만들어 질 수 있고, 각 하위 모듈의 내용을 가져 오는 Super Git Repo가 가능합니까?
나는 여러 서브 모듈을 들고있는 git repo를 만드는 명백한/순진한 접근법을 사용하여 이것을 시도했습니다.
그런 다음이 git repo를 다른 git repo에 하위 모듈로 추가하십시오.
그런 다음 Super Git Repo의 루트 디렉토리에서 git submodule init
그리고 git submodule update
. 그러나 이것은 하위 하위 모듈을 가져 오지 못합니다.
해결책
다른 팁
처럼 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에서 요한 허 랜드 (Johan Herland)jherland
).
하위 모듈의 하위 모듈 만 확인하려면
git submodule update --init <submoduleName>
갈 길입니다.
(오래된 원본 답변)
에 따르면 수동 페이지
git submodule update --recursive
중첩 된 하위 모듈을 업데이트해야합니다. 그러나 초기 부분은 재귀가 아닐 수 있습니다.
GIT 버전에 따라이 기사를 통해 더 "스크립팅"접근 방식으로 돌아갈 수 있습니다. GIT 하위 모듈을 재귀 적으로 업데이트합니다 이를 통해 Recursive Init 및 업데이트를 허용합니다.
#!/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);
}