2013-06-21 2 views
0

상위 저장소에 많은 서브 모듈이있는 경우. 상위 저장소가 하위 모듈의 현재 커밋을 저장합니까?Git 서브 모듈과 그 부모와의 관계

부모 저장소를 새로 설치할 때 상위 저장소를 체크 아웃 할 때 하위 모듈의 최신 버전을 배포하지 않는 것처럼 보입니다.

상자가 부팅 할 때 사용하는 복제 명령은 다음과 같습니다.

git clone --recursive repo_url folder 

답변

1

상위 리포지토리는 하위 모듈 자체의 코드가 아닌 각 하위 모듈의 커밋 해시를 저장합니다. 부모를 재귀 적으로 복제하면 해당 커밋까지 하위 모듈이 복제됩니다. 이것은 실제로 좋은 일입니다. 자식이 하위 버전의 새로운 버전을 가져 오는 것을 원하지 않을 것이기 때문입니다. 부모가 부모와 호환되지 않을 수도 있기 때문입니다.

서브 모듈을 업데이트하려면 명시 적으로 수행해야합니다 : 당신은 당신이 업데이트 된 서브 모듈이있는 마스터에서 로컬 복사본을 업데이트하는 경우

git add submoduledir 
git commit -m "Update submodule" 

:

cd submoduledir/ 
git pull origin master 
cd .. 
git status 

그런 다음 업데이트 된 서브 모듈을 커밋 이 :

git pull origin master 
git submodule update --recursive 
0

그것은 저장하지 않고 대신 커밋 서브 모듈이 어디에 있고 어디에 있는지 알았습니다. this을 확인하십시오.

그리고 서브 모듈의 최신을 얻기 위해 사용 :

git submodule foreach --recursive 'echo `git checkout master`' 
git submodule foreach --recursive 'echo `git pull`' 

모든 서브 모듈은 master 지점에 있어야 할 가정.

상태를 유지하려면 커밋하십시오.

+0

영리하지만, 'echo'git checkout master && git pull'을 별도로 실행하면 처음부터 오류가 무시됩니다. 캐비닛 만이 모든 서브 모듈이 마스터 브랜치를 사용한다고 가정합니다. – Luke

+0

@ 루케 나는이 두 사람과 합류하려고 계획하고 있었지만 단순하게 유지할 것을 생각했다. 첫 번째 오류를 어떻게 무시합니까? 네, 가정하에 @ master branch를 만들었습니다. –

+0

'&&'는'git checkout master'가 0이 아닌 종료 코드와 함께 리턴하면'git pull'을 건너 뛰게합니다. – Luke

관련 문제