Git 서브 모듈을 추가 할 때 브랜치 / 태그를 어떻게 지정할 수 있습니까?


756

어떻게 git submodule add -b작동합니까?

특정 브랜치가있는 서브 모듈을 추가 한 후, 새로운 복제 된 저장소 (after git submodule update --init)는 브랜치 자체가 아닌 특정 커밋에있게됩니다 ( git status서브 모듈의 "현재 브랜치에 없음").

나는에 대한 정보 찾을 수없는 .gitmodules.git/config, 서브 모듈의 지점 또는 특정 커밋에 대한을 어떻게 수행 망할 놈의 그림을 알아?

또한 브랜치 대신 태그를 지정할 수 있습니까?

버전 1.6.5.2를 사용하고 있습니다.


3
당신은이 경우 기존의 서브 모듈 아직 지점을 추적되지 않습니다 ,하지만 당신은 ... 지금 지점을 추적 할 텐데 내 대답은 아래를 참조
VonC

답변:


745

참고 : Git 1.8.2는 분기를 추적 할 수있는 가능성을 추가했습니다. 아래 답변 중 일부를 참조하십시오.


이것에 익숙해지면 약간 혼란 스럽지만 하위 모듈은 가지가 아닙니다. 그것들은 당신이 말했듯이 서브 모듈 저장소의 특정 커밋에 대한 포인터 일뿐입니다.

즉, 다른 사람이 저장소를 체크 아웃하거나 코드를 가져오고 하위 모듈 업데이트를 수행하면 하위 모듈이 해당 커밋에 대해 체크 아웃됩니다.

자주 변경되지 않는 서브 모듈에 유용합니다. 프로젝트의 모든 사람이 동일한 커밋에서 서브 모듈을 가질 수 있기 때문입니다.

서브 모듈을 특정 태그로 이동 시키려면 :

cd submodule_directory
git checkout v1.0
cd ..
git add submodule_directory
git commit -m "moved submodule to v1.0"
git push

그런 다음 submodule_directory를 해당 태그로 변경하려는 다른 개발자가이를 수행합니다.

git pull
git submodule update --init

git pull서브 모듈 디렉토리가 커밋하는 변경 git submodule update실제로 새 코드에 병합됩니다.


8
아주 좋은 설명입니다, 감사합니다! 물론 대답을 읽은 후에 커밋이 하위 모듈 자체 (submodule / .git / HEAD)에 저장되어 있음을 알았습니다.
Ivan

4
이것은 git 1.7.4.4에서 작동하지 않는 것 같습니다. cd my_submodule; git checkout [ref in submodule's repository수율 fatal: reference is not a tree: .... 마치 git부모 저장소에서만 작동하는 것처럼 보입니다.
James A. Rosen

3
자주 업데이트되는 프로젝트에도 git 서브 모듈을 사용하는 것이 좋습니다. 리눅스 커널은 그것을 사용하고 그렇게 나쁘지 않다

10
git checkout v1.0분기 또는 태그는?
Bernhard Döbler

8
커밋에 대한 사람이 읽을 수있는 별명 태그를 고려하십시오. 커밋은 각 파일의 특정 상태 집합입니다. 브랜치는 변경할 수 있다는 점을 제외하면 본질적으로 동일합니다.
deadbabykitten

656

여기에 실제로 다른 답변의 대기업 인 답변을 추가하고 싶지만 더 완벽 할 수 있습니다.

이 두 가지가있을 때 Git 서브 모듈이 있다는 것을 알고 있습니다.

  1. 다음 .gitmodules과 같은 항목이 있습니다.

    [submodule "SubmoduleTestRepo"]
        path = SubmoduleTestRepo
        url = https://github.com/jzaccone/SubmoduleTestRepo.git
    
  2. Git 저장소에 서브 모듈 오브젝트 (이 예제에서는 SubmoduleTestRepo)가 있습니다. GitHub 는 이것을 "서브 모듈"객체로 보여줍니다. 또는 git submodule status명령 줄에서 수행하십시오 . Git 하위 모듈 객체는 특별한 종류의 Git 객체이며 특정 커밋에 대한 SHA 정보를 보유합니다.

    를 수행 할 때마다 git submodule update서브 모듈이 커밋의 컨텐츠로 채워집니다. 의 정보로 인해 커밋을 찾을 수있는 위치를 알고 .gitmodules있습니다.

    이제 파일에 -b한 줄만 추가하면 .gitmodules됩니다. 따라서 동일한 예를 따르면 다음과 같습니다.

    [submodule "SubmoduleTestRepo"]
        path = SubmoduleTestRepo
        url = https://github.com/jzaccone/SubmoduleTestRepo.git
        branch = master
    

    참고 :.gitmodules 파일에서는 분기 이름 만 지원 되지만 SHA 및 TAG는 지원되지 않습니다! (대신에 각 모듈에 대한 브랜치 커밋은 git add .예를 들어 " "를 사용하여 추적하고 업데이트 할 수 있으며 매번 파일 git add ./SubmoduleTestRepo을 변경할 필요가 없습니다 .gitmodules)

    서브 모듈 객체가 여전히 특정 커밋을 가리키고 있습니다. 이 -b옵션을 구입 하는 유일한 방법 --remote은 Vogella의 답변에 따라 업데이트에 플래그를 추가하는 기능입니다 .

    git submodule update --remote
    

    서브 모듈이 가리키는 커밋에 서브 모듈의 내용을 채우는 대신 마스터 브랜치의 최신 커밋으로 해당 커밋을 교체 한 다음 서브 모듈을 해당 커밋으로 채 웁니다. 이것은 djacobs7 답변으로 두 단계로 수행 할 수 있습니다. 서브 모듈 객체가 가리키는 커밋을 업데이트 했으므로 변경된 서브 모듈 객체를 Git 저장소에 커밋해야합니다.

    git submodule add -b지점으로 모든 것을 최신 상태로 유지하는 마술 같은 방법은 아닙니다. 단순히 .gitmodules파일에 분기에 대한 정보를 추가 하고 하위 모듈 개체를 지정된 분기의 최신 커밋으로 업데이트하여 채울 수있는 옵션을 제공합니다.


14
이 답변에는 더 많은 투표권이 있어야합니다. 나는 지난 날 많은 게시물을 읽었으며 모든 혼란을 없애줍니다. SVN 세계에서 나오고 외부 장치를 사용합니다-자식 서브 모듈 분기 추적이 마술처럼 모든 것을 분기에서 유지한다고 생각하고 싶습니다. 그러나 이것은 사실이 아닙니다! 명시 적으로 업데이트해야합니다! 언급했듯이 변경된 서브 모듈 객체를 커밋해야합니다.
dtmland

12
이 지점 추적은 태그 에서도 작동 합니까? 지점 대신에 태그를 지정 .gitmodules하고 수행 한 후 및 $ git submodule update --init --remote TestModule오류가 발생했습니다 . 실제 분기로 수행하면 작동합니다. 정확한 커밋을 지정하지 않고도 태그 를 지정할 수 있습니까? fatal: Needed a single revisionUnable to find current origin/TestTag revision in submodule path 'TestModule'.gitmodules
Hhut

5
작동하지 않는 것 같습니다. 해시를 업데이트 .gitmodules하고 실행했는데 git submodule update아무 일도 없었습니까?
CMCDragonkai

2
어떻게 든 이것은 나를 위해 작동하지 않습니다. SHA Commit Id를 사용하면 항상 "현재 개정을 찾을 수 없습니다 (HEAD의 개정 번호와 해당 개정 번호를 두 번 확인했습니다.)"라는 오류 메시지가 표시됩니다. 그러나 master를 사용하면 작동합니다.
info clogged June

2
분기 속성에 SHA를 입력해도 효과가 없습니다. 이 사용법은 다음 문서 에서도 지원 되지 않습니다 . git-scm.com/docs/gitmodules
Jakub

339

(2019 년 2 분기 Git 2.22 도입 git submodule set-branch --branch aBranch -- <submodule_path>)

참고 당신이 경우 기존의 서브 모듈 되지 않은 아직 지점을 추적 (다음을, 당신은 자식 1.8.2+이있는 경우 ) :

  • 부모 리포지토리가 하위 모듈이 이제 분기를 추적한다는 것을 알고 있어야합니다.

    cd /path/to/your/parent/repo
    git config -f .gitmodules submodule.<path>.branch <branch>
    
  • 서브 모듈이 실제로 해당 분기의 최신 버전인지 확인하십시오.

    cd path/to/your/submodule
    git checkout -b branch --track origin/branch
      # if the master branch already exist:
      git branch -u origin/master master
    

         ( "원산지"의 이름으로 되 REPO 상류 원격 서브 모듈.로부터 클로닝되었다 해당 서브 모듈을 표시 안에. 일반적으로, 그것이 '원점')
git remote -v

  • 부모 저장소에 하위 모듈의 새로운 상태를 기록하는 것을 잊지 마십시오.

    cd /path/to/your/parent/repo
    git add path/to/your/submodule
    git commit -m "Make submodule tracking a branch"
    
  • 해당 서브 모듈에 대한 후속 업데이트는 다음 --remote옵션 을 사용해야합니다 .

    # update your submodule
    # --remote will also fetch and ensure that
    # the latest commit from the branch is used
    git submodule update --remote
    
    # to avoid fetching use
    git submodule update --remote --no-fetch 
    

참고로 힘내 2.10+ (Q3 2016), 당신은 '사용할 수있는 .지점 이름으로'

브랜치의 이름은 다음과 같이 기록 submodule.<name>.branch.gitmodules대한 update --remote. 하위 모듈의 분기 이름이 현재 저장소의 현재 분기와 동일한 이름을 나타 내기 위해
특수 값 .인를 사용합니다 .

그러나 LubosD의 의견따르면

를 사용 git checkout하여 수행 할 분기 이름이 " ."인 경우 커밋되지 않은 작업이 종료됩니다! 대신
사용하십시오 git switch.

이는 Git 2.23 (2019 년 8 월) 이상을 의미합니다.

" 혼란스러워git checkout "


분기에 따라 모든 하위 모듈을 업데이트하려는 경우 :

    git submodule update --recursive --remote

댄 카메론 (Dan Cameron)그의 답변 에서 언급 한 것처럼 , 업데이트 된 각 서브 모듈에 대한 결과는 거의 항상 분리 된 HEAD가 입니다.

( Clintm의 노트 코멘트에 당신이 실행하는 경우, git submodule update --remote그 결과 SHA1는 서브 모듈에 현재 분기와 같은, 그것은 아무것도 할 떠나 서브 모듈을 여전히 "그 지점에"이 아닌 분리 된 머리 상태에 있지 않습니다. )

브랜치가 실제로 체크 아웃되도록 (그리고 부모 리포지토리의 서브 모듈을 나타내는 특수 항목 의 SHA1을 수정하지 않도록 )하기 위해 다음과 같이 제안합니다.

git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git switch $branch'

각 하위 모듈은 여전히 ​​동일한 SHA1을 참조하지만 새 커밋을 수행하는 경우 하위 모듈이 추적하려는 분기에서 참조하므로 해당 커밋을 푸시 할 수 있습니다.
하위 모듈 내에서 푸시 한 후에는 상위 리포지토리로 돌아가서 수정 된 하위 모듈에 대해 새 SHA1을 추가, 커밋 및 푸시하는 것을 잊지 마십시오.

사용주의 $toplevel추천, 코멘트에 의해 알렉산더 포그 레브 냑을 . 커밋 f030c96
$toplevel : git1.7.2에서 2010 년 5 월에 도입되었습니다 .

최상위 디렉토리의 절대 경로를 포함합니다 (있는 곳 .gitmodules).

dtmland주석에 추가합니다 :

foreach 스크립트는 분기를 따르지 않는 하위 모듈을 체크 아웃하지 못합니다.
그러나이 명령은 다음 두 가지를 모두 제공합니다.

 git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git switch $branch' –

같은 명령이지만 읽기 쉽습니다.

git submodule foreach -q --recursive \
    'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \
     [ "$branch" = "" ] && \
     git checkout master || git switch $branch' –

umläute 을 세련 dtmland 단순화 된 버전의 명령 코멘트에 :

git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

여러 줄 :

git submodule foreach -q --recursive \
  'git switch \
  $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

Git 2.26 (Q1 2020) 이전에는 서브 모듈에서 업데이트를 재귀 적으로 가져 오도록 지시 된 페치는 필연적으로 많은 양의 출력을 생성하며 오류 메시지를 찾기 어렵게됩니다.

이 명령은 작업이 끝날 때 오류가 발생한 하위 모듈을 열거하도록 지시되었습니다 .

Emily Shaffer ( )의 commit 0222540 (2020 년 1 월 16 일)을 참조하십시오 . (의해 병합 Junio C 하마노 - -b5c71cc 커밋 05 이월 2020)nasamuffin
gitster

fetch: 서브 모듈 페치 중 실패 강조

에 의해 서명 : 에밀리 셰퍼

많은 서브 모듈이있을 때 서브 모듈 페치가 실패하는 경우, 하나 이상의 페치가 다시 실패하면 단독 실패 서브 모듈 페치의 오류가 다른 서브 모듈의 활동에 묻 힙니다 fetch-by-oid.
늦게 오류를 불러내 어 사용자가 무언가 잘못되었다는 것을 알 수 있도록합니다 .

주위 fetch_finish()run_processes_parallel,mutexing에 의해 동 기적으로 만 호출 되기 때문에 필요하지 않습니다 submodules_with_errors.


1
질문 : 나는, subModule1 폴더가 마스터 지점을 추적하고자하는 경우 것 같은 결과 명령의 모양을 자식 설정 -f .gitmodules submodule.subModule1.branch 마스터
BraveNewMath

1
foreach(가) 하드 코딩에 스크립트 의존하지 않습니다 <path>당신이 대체 할 경우, <path>함께 $toplevel/.
Alexander Pogrebnyak

1
foreach스크립트는 분기를 다음하지 않는 체크 아웃 서브 모듈에 실패합니다. 그러나이 명령은 다음을 모두 제공합니다.git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git checkout $branch'
dtmland

2
다음은 @dtmland 스크립트의 단순화 된 버전입니다.git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
umläute

1
오! 실제로 foreach 스크립트는 필요하지 않습니다. --merge 또는 --rebase 스위치를 사용하여 하위 모듈 업데이트를 실행해야합니다 : git submodule update --remote --merge또는 git submodule update --remote --rebase. 이 명령은 원격 브랜치를 추적합니다.
GregTom

206

Git 1.8.2는 분기를 추적 할 수있는 가능성을 추가했습니다.

# add submodule to track master branch
git submodule add -b branch_name URL_to_Git_repo optional_directory_rename

# update your submodule
git submodule update --remote 

Git 서브 모듈 참조


4
태그에도 적용됩니까?
ThorSummoner

1
이런 식으로 하위 모듈을 추가하면 .gitmodules파일에 어떻게 반영 됩니까?
유진

1
덕분에 난 그냥 나를 GitHub의 GH-페이지 웹 사이트와 동기화하는 서브 모듈 폴더 생성하는 데 도움 관한 정보를 사용 :에서 전체 예제 github.com/o2platform/fluentnode/issues/22
디 니스 크루즈

4
당신은에 잠글 수 있습니다 태그 와 함께 git submodule add -b tags/<sometag> <url>당신은 온라인으로 볼 수있는 branch = tags/<sometag>.gitmodules
KCD

9
@KCD 어떤 버전의 git이 태그로이를 수행 할 수 있습니까? 광산이 작동하지 않습니까?
CMCDragonkai

58

Git 서브 모듈을 사용하는 방법의 예.

  1. 새로운 리포지토리 생성
  2. 그런 다음 다른 저장소를 하위 모듈로 복제하십시오.
  3. 그런 다음 하위 모듈에 V3.1.2라는 태그를 사용합니다.
  4. 그리고 우리는 커밋합니다.

그리고 그것은 다음과 같이 조금 보입니다 :

git init 
vi README
git add README
git commit 
git submodule add git://github.com/XXXXX/xxx.yyyy.git stm32_std_lib
git status

git submodule init
git submodule update

cd stm32_std_lib/
git reset --hard V3.1.2 
cd ..
git commit -a

git submodule status 

어쩌면 도움이됩니까 (분기가 아닌 태그를 사용하더라도)?


4
그것은 기본적으로 djacobs7과 같은 대답이지만 어쨌든 고맙습니다 :)
Ivan

1
당신은 후에 변화를 저지를 수 git reset --hard V3.1.2있을까요? git status부모 디렉토리 와 함께 "커밋 할 사항 없음"을 얻습니다 .
Nick Radford

1
@Ivan : 이것이 djacobs7의 응답과 어떻게 같은지 설명해 주시겠습니까? 내가 아는 한, 그의 응답에는 'submodule add'명령도 포함되지 않고 대신 모듈의 원래 git repo에 대한 링크없이 repo가 ​​직접 추가됩니다. 적어도이 접근법을 시도했을 때 .gitmodules에는 링크가 없습니다.
Michel Müller

djacobs7의 답변에는 하위 모듈 추가부터 시작하는 전체 설명이 포함되어 있지 않습니다. 그는 당신이 이미 가지고 있다고 가정합니다.
CodeMonkey

전체 하위 모듈 내용을 추적 된 객체로 기본 저장소에 추가하지 않습니까?
user1312695

38

내 경험상 수퍼 프로젝트에서 분기를 전환하거나 향후 체크 아웃하면 하위 모듈이 올바르게 추가되고 추적되는지 여부에 관계없이 하위 모듈의 HEAD가 분리됩니다 (예 : @ djacobs7 및 @Johnny Z 답변).

그리고 수동으로 또는 스크립트 git 서브 모듈 foreach를 통해 올바른 분기를 수동으로 체크 아웃하는 대신 사용할 수 있습니다.

그러면 하위 속성 구성 파일에서 분기 속성을 확인하고 설정된 분기를 체크 아웃합니다.

git submodule foreach -q --recursive 'branch="$(git config -f <path>.gitmodules submodule.$name.branch)"; git checkout $branch'


좋은. +1. 나는 당신의 명령 을 내 대답에 포함 시켰습니다 .
VonC

33

Git 서브 모듈은 약간 이상하다. 항상 "분리 된 헤드"모드에있다. 예상 한대로 분기의 최신 커밋으로 업데이트되지 않는다.

그래도 생각할 때 의미가 있습니다. submodule bar로 foo 저장소를 작성한다고 가정 해 봅시다 . 변경 사항을 푸시하고 저장소 foo 에서 commit a7402be를 체크 아웃하도록 지시합니다 .

그런 다음 누군가 복제본을 만들기 전에 저장소 표시 줄을 변경했다고 상상해보십시오 .

저장소 foo 에서 커밋 a7402be를 체크 아웃하면 내가 푸시 한 것과 동일한 코드가 필요합니다. 그렇기 때문에 서브 모듈이 명시 적으로 지시 한 다음 새로운 커밋을 할 때까지 서브 모듈이 업데이트되지 않는 이유입니다.

개인적으로 하위 모듈은 Git에서 가장 혼란스러운 부분이라고 생각합니다. 내가 할 수있는 것보다 서브 모듈을 더 잘 설명 할 수있는 곳이 많이 있습니다. Scott Chacon의 Pro Git 을 추천 합니다.


나는 추천서 덕분에 git book을 읽기 시작할 때라고 생각한다.
Ivan

죄송하지만, 귀하의 foo 버전을 통해 a7402be로 푸시 한 것과 동일하거나 최신 바를 얻을 수 있는지 명확하지 않았습니다. 감사합니다 :)
mmm

6
문제는 "이 서브 모듈을 브랜치 X에 유지"라고 말하는 옵션이 있어야 자동으로 업데이트하고 싶다면 그렇게 할 수 있다는 것입니다. 서브 모듈은 업데이트 할 때마다 모든 플러그인에 대해 슈퍼 프로젝트를 다시 저장할 필요없이 플러그인이 모두 Git 저장소 인 WordPress 설치를 관리하는 데 훨씬 유용합니다.
jerclarke

@jeremyclark git clone git://github.com/git/git.git그리고 그 기능을 밀어 ...? = D
Alastair

1
Git의 가장 혼란스러운 부분은 10 년이 넘는 개발 후에도 업무 수행에 도움이되는 도구는 여전히 사용자 경험이 나쁘다는 것입니다. 시간.
0xC0000022L

20

하위 모듈의 분기를 전환하려면 (저장소의 일부로 하위 모듈이 이미 있다고 가정) :

  • cd 하위 모듈을 포함하는 저장소의 루트
  • .gitmodules편집을 위해 열기
  • 아래 줄을 추가 path = ...하고 url = ...그 말한다 branch = your-branch각 서브 모듈에 대한; 파일을 저장하십시오 .gitmodules.
  • 그런 다음 디렉토리를 변경하지 않고 $ git submodule update --remote

... 이것은 수정 된 각 하위 모듈에 대해 지정된 분기의 최신 커밋을 가져와야합니다.


10

내 .gitconfig 파일에 있습니다. 여전히 초안이지만 현재로서는 유용한 것으로 판명되었습니다. 하위 모듈을 항상 해당 분기에 다시 연결하는 데 도움이됩니다.

[alias]

######################
#
#Submodules aliases
#
######################


#git sm-trackbranch : places all submodules on their respective branch specified in .gitmodules
#This works if submodules are configured to track a branch, i.e if .gitmodules looks like :
#[submodule "my-submodule"]
#   path = my-submodule
#   url = git@wherever.you.like/my-submodule.git
#   branch = my-branch
sm-trackbranch = "! git submodule foreach -q --recursive 'branch=\"$(git config -f $toplevel/.gitmodules submodule.$name.branch)\"; git checkout $branch'"

#sm-pullrebase :
# - pull --rebase on the master repo
# - sm-trackbranch on every submodule
# - pull --rebase on each submodule
#
# Important note :
#- have a clean master repo and subrepos before doing this !
#- this is *not* equivalent to getting the last committed 
#  master repo + its submodules: if some submodules are tracking branches 
#  that have evolved since the last commit in the master repo,
#  they will be using those more recent commits !
#
#  (Note : On the contrary, git submodule update will stick 
#to the last committed SHA1 in the master repo)
#
sm-pullrebase = "! git pull --rebase; git submodule update; git sm-trackbranch ; git submodule foreach 'git pull --rebase' "

# git sm-diff will diff the master repo *and* its submodules
sm-diff = "! git diff && git submodule foreach 'git diff' "

#git sm-push will ask to push also submodules
sm-push = push --recurse-submodules=on-demand

#git alias : list all aliases
#useful in order to learn git syntax
alias = "!git config -l | grep alias | cut -c 7-"

3

우리는 ck을 사용합니다 을 하여 다른 Git 리포지토리에서 특정 모듈을 가져옵니다. 제공된 저장소의 전체 코드 기반없이 코드를 가져와야합니다. 거대한 저장소에서 매우 특정한 모듈 / 파일이 필요하며 업데이트를 실행할 때마다 업데이트해야합니다.

그래서 우리는 이런 식으로 그것을 달성했습니다.

구성 만들기

name: Project Name

modules:
  local/path:
    repository: https://github.com/<username>/<repo>.git
    path: repo/path
    branch: dev
  other/local/path/filename.txt:
    repository: https://github.com/<username>/<repo>.git
    hexsha: 9e3e9642cfea36f4ae216d27df100134920143b9
    path: repo/path/filename.txt

profiles:
  init:
    tasks: ['modules']

위의 구성을 사용하면 첫 번째 모듈 구성에 지정된대로 제공된 GitHub 저장소에서 하나의 디렉토리를 작성하고 다른 하나는 지정된 저장소에서 파일을 가져와 작성하는 것입니다.

다른 개발자들만 실행하면됩니다

$ quack

그리고 위의 구성에서 코드를 가져옵니다.


2

서브 모듈에 대한 브랜치를 선택하는 유일한 효과는 명령 행 --remote에서 옵션 을 전달할 때마다 git submodule updateGit이 선택된 원격 브랜치 의 최신 커밋을 분리 된 HEAD 모드 (기본 --checkout동작이 선택된 경우)로 체크 아웃 한다는 것 입니다.

하위 모듈의 얕은 복제본으로 작업하는 경우 Git 하위 모듈에 대해이 원격 분기 추적 기능을 사용할 때 특히주의해야합니다. 하위 모듈 설정에서이 목적으로 선택한 분기 는 복제되는 분기가 아닙니다git submodule update --remote . 당신은 또한 전달하는 경우 --depth매개 변수를하고 당신이 망할 놈의 지시하지 않는 지점에 대해 당신이 복제 할 - 실제로 당신이 할 수없는 에서 git submodule update명령 행! -, 명시 적 매개 변수가 누락 된 경우 git-clone(1)설명서에 설명 된대로 암시 적으로 작동 하므로 기본 분기 만 복제합니다 .git clone --single-branch--branch

놀랍게도, git submodule update명령에 의해 복제 단계가 수행 된 후, 마지막으로 서브 모듈에 대해 설정 한 원격 브랜치에 대한 최신 커밋을 체크 아웃하려고 시도하며 이것이 기본이 아닌 경우 로컬 얕은 복제본으로 인해 실패합니다.

치명적 : 단일 개정이 필요함

하위 모듈 경로 'mySubmodule'에서 현재 원점 / NotThePrimaryBranch 개정 을 찾을 수 없습니다.


오류를 수정하는 방법-단일 개정이 필요하십니까?
NidhinSPradeep

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.