문제

GIT 서브 모듈이 다른 여러 git 하위 모듈로 만들어 질 수 있고, 각 하위 모듈의 내용을 가져 오는 Super Git Repo가 가능합니까?

나는 여러 서브 모듈을 들고있는 git repo를 만드는 명백한/순진한 접근법을 사용하여 이것을 시도했습니다.

그런 다음이 git repo를 다른 git repo에 하위 모듈로 추가하십시오.

그런 다음 Super Git Repo의 루트 디렉토리에서 git submodule init 그리고 git submodule update. 그러나 이것은 하위 하위 모듈을 가져 오지 못합니다.

도움이 되었습니까?

해결책

언급했듯이 후 향적으로 추가 -git repo에 재확인

git submodule update --init --recursive

작동해야합니다.

다른 팁

처럼 Sridhar 아래의 의견, git1.6.5+, git clone --recursive 이제 공식적인 대안입니다.

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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top