2017-02-23 6 views
10

나는 git 레포를 가지고 있는데, 다른 하나는 submodule 의존성입니다. 내 프로젝트의 루트 (등 .git, .gitsubmodules이있는 곳)에서 나는이 다음과 같은 메시지와 함께 실패git이 주어진 커밋에 대해 특정 유효 서브 모듈을 가져 오지 못하고 그 커밋을 수정하는 이유는 무엇입니까?

git submodule update 

전화 :

서브 모듈 경로 'SRC/프레임 워크'에서 불러 온

하지만, cc8c38e9d853491c672452d8dbced4666fc73ec8을 포함하지 않았습니다. 해당 커밋을 직접 가져 오지 못했습니다.

여기에서 src/framework은 내 프로젝트 (PROJECT_ROOT/src/framework)의 하위 디렉토리이며 타사 repo가있는 곳이어야합니다. 주어진 커밋 해시가 유효합니다.

나는 또한 git clone --recursive <my-repo>을 시도했지만 실패했습니다. 따라서 정말 특정 버전을 검색 할 필요 때문에 내 코드 휴식의 repo framework 최근 업데이트를 내 .gitsubmodules

내용은 내가 다음과 같은 중요한 사실을주의해야 그 외에도

[submodule "src/framework"] 
     path = src/framework 
     url = [email protected]:gh/framework.git 

입니다 일이 잘 돌아가는 곳.

+0

* 주어진 커밋 해시가 유효합니다. * 해당 해시가있는 커밋이 서브 모듈 레포에 있음을 의미합니까? – Leon

+0

예, GitLab을 사용하는 웹 브라우저의 링크를 따라 커밋과 관련된 모든 변경 사항을 표시하는 페이지로 이동할 수 있습니다. 따라서 어떤 사람이 리셋을 한 것처럼 보이지 않습니다. – rbaleksandar

+0

권한 문제 일 수 있습니다. 서브 모듈 레포를 복제 할 수 있습니까? – Leon

답변

7

네,

당신이 그와 생각의 repo가 ​​포함 커밋 복제 할 수 있습니다 (GitLab 사용) 내 웹 브라우저에서 링크를 따를 수 있는가?
GitLab은 액세스를 제한하는 permission level을 가지고 있으므로 git clone 명령이 올바른 사용자와 실행되고 ssh 키가 user home directory/.ssh인지 확인하십시오.

서브 모듈을 로컬 하드 드라이브의 어느 위치 에나 복제 할 수 없다면 오류 메시지를 설명 할 수 있습니다.

문제는 내가 작업했던 저장소에서 하위 모듈로 연결된 커밋보다 먼저 커밋을 다시 설정 한 사람이 발생했습니다. 이로 인해 참조가 유효하지 않게되었습니다.

cd /path/to/parent/repo 
git config -f .gitmodules submodule.bar1.branch master 

그런 다음 마지막으로 가져온에서 서브 모듈을 업데이트 master

git submodule update --remote 

을 커밋 :이

당신은 make sure the submodule follows a branch (여기에서, 예를 들어, master)가 있습니다 해결하는 방법을 몰라 --remote option이 아니며은 수퍼 프로젝트의 기록 된 SHA-1을 사용하여 하위 모듈을 업데이트하지만 대신 서브 모듈의 원격 추적 브랜치의 상태를 사용하십시오.

이렇게하면 "did not contain cc8c38e9d853491c672452d8dbced4666fc73ec8"오류 메시지가 표시되지 않습니다.