2012-08-23 3 views
0

나는 복잡한 문제/케이스가 자식 서브 모듈과 연결되어있다. github 및 타사 하위 모듈에 대한 자체 레포가 있습니다 (다른 회사에서 제공, 읽기 전용). init 서브 모듈을 다루고, 업데이트하고, .gitsubmodule과 새 폴더를 master repo에 추가하는 등 모든 작업이 올바르게 작동합니다. 이제 하위 모듈 파일을 변경하고 하위 파일에 새 파일을 추가하려고합니다. 내가 해낸 다음 하위 모듈 디렉토리 수준에서 커밋을 실행했습니다. 폴더를 master repo로 변경했고 git status는 submodule 폴더에 커밋되지 않은 커밋을 보여줍니다. 그래서 ... git commit -a, git push. (하위 모듈 디렉토리에서 git 상태를 검사 할 때 X가 X에 의해 'origin/master'보다 앞서 있다는 정보를 얻게됩니다.)자식 서브 모듈 (한 번 더)

github에서 내 repo의 순환 복제를 만들면 오류 (나는 서브 모듈의 변경으로 인한 가정 해 봅시다)는 :

fatal: reference is not a tree: c19485a57b5152959b9a916409ad5d901c44741d 
Unable to checkout 'c19485a57b5152959b9a916409ad5d901c44741d' in submodule path 'apt' 

그래서, 내 질문은 :

  1. 것은 내가 서브 모듈의 변경을하고 github에로 (추적)를 밀어 수 있습니다.
    • 그렇다면, 필자가 수행해야하는 작업은 서브 모듈과 그 내부의 변경 사항을 다른 호스트 (일부 워크 플로)로 가져올 수 있다는 것입니다.
    • 그렇지 않다면, 내 github의의 REPO 수준에서 그들을 보는 다른 호스트
  2. 그것은 모든 수를 끌어와 서브 모듈의 변경을하고 회피 할 수있는 방법?

답변

0

서브 모듈 내부에서 git push을 실행하는 것을 잊었을 것 같습니다. 이는 닫히는 프로젝트에서 커밋을 푸시하기 전에 수행되어야합니다. 그렇지 않으면 커밋이 리모컨에 존재하지 않으므로 아무도 업데이트 된 하위 모듈을 체크 아웃 할 수 없습니다.

+0

하위 모듈에서'git push'를 실행할 수 없습니다. 슬픈 것은 읽기 전용이므로 repo입니다. 쓰기에 충분한 권한이 없습니다. –

0

문제는 밀어 넣기 권한이없는 타사 저장소를 변경하려고하는 것입니다. 해결 방법은 저장소의 고유 한 복제본을 만드는 것입니다. 편집을 수행 할 때 해당 서브rep의 컨텍스트에서 커밋하고 밀어 넣어야합니다. 외부 저장소는 하위 모듈의 상태를 추적하지만 하위 모듈의 파일 변경을 관리하면 안됩니다.

그래서 워크 플로 솔루션은 밀어 넣기 권한이있는 제 3 자 저장소의 복제본을 갖게됩니다. 자신의 버전의 repo를 하위 모듈로 프로젝트에 추가해야합니다. 나는이 answer이 서브 모듈을 사용하는 올바른 방법에 혼란을 없애는 데 도움이 될 것이라고 생각합니다 (때때로 약간 까다 롭습니다).

관련 문제