2012-01-13 4 views
9

나는 자식 서브 모듈을 만들고이를 주 저장소에 푸시했습니다. 이것은 정상적으로 작동하고 브라우저를 통해 저장소의 하위 모듈을 볼 수 있습니다.git submodule 업데이트가 한 컴퓨터에서 오류로 실패하지만 다른 컴퓨터에서 작동합니다.

제대로 작동하는지 테스트하려면 원본을 새로 빌드하는 트리를 가져 오려고했습니다. 먼저 git submodule init을 실행 한 다음 git submodule update <submodule-name>으로 실행했습니다.

이 오류와 함께 실패합니다

error: pathspec 'x/mypkg' did not match any file(s) known to git. Did you forget to 'git add' 

내가 서브 모듈로하지만 운 .gitmodules에 URL을 추가했습니다.

답변

3

이것은 팀의 누군가가 게시되지 않은 (커밋되었지만 원격 서버로 푸시되지 않은) 하위 모듈의 변경 사항을 가지고 있기 때문일 수 있습니다. 그런 다음 git 서버에 존재하지 않는 서브 모듈에서 git commit에 대한 참조를 포함하는 superproject를 게시했습니다. 그래서 git은 찾을 수없는 특정 서브 모듈 git commit ID를 풀다.

변경 사항이 시스템의 다른 위치 또는 다른 시스템의 저장소에있는 경우에 해당됩니다.

해결하려면 해당 커밋을 참조하는 저장소로 이동하여 서브 모듈 변경 내용을 서버에 게시 (푸시)하십시오. 또는 다른 커밋 ID를 가리 키도록 하위 모듈을 변경하십시오.

+0

나는 매우 비슷한 경우를 가졌지 만 아직 확실하지 않다고 생각한다. 나는 새 서브 모듈로 추가 한 라이브러리를 가지고 있었고 다른 서브 모듈은이 라이브러리를 사용했습니다. 먼저 라이브러리를 수정하고 커밋 한 다음 밀어 넣고 수정 한 다음 사용하는 하위 모듈을 밀어 넣었습니다. 내 경우에는 아무도 이걸 수정하지 않습니다. 이상하게도 라이브러리를 사용하는 하위 모듈을 업데이트 할 수 없습니다. –

+0

@GauravSinha'git submodule update'에서 오류가 발생하면, 서브 모듈이 가리키고있는 자식 커밋 ID를 찾을 수 없기 때문입니다. URL을 잘못 입력했거나 서브 모듈이 가리키는 커밋을 푸시하지 않은 경우 "신선한 트리"를 작성하고 있기 때문입니다. –

+0

그것이 잘못된 URL일지도 모른다고 생각합니다. 손가락을 건드렸습니다. –

1

다른 저장소로 새 하위 모듈을 가져 오려면 git submodule update을 실행하기 전에 git submodule init을 한 번 실행해야한다고 생각합니다. 그러면 .gitmodules의 새 하위 모듈이 .git/config에 등록됩니다.

+0

git submodule update 명령을 실행하기 전에 git submodule init을 실행했습니다. 불행히도 도움이되지 않습니다. 혼동을 피하기 위해 내 질문이 업데이트되었습니다. –

13

또한에없는 서브 모듈을 으로 업데이트하는 동안 TortoiseGit을 사용하여이 오류가 발생했습니다. 즉, 그들은 .gitmodules에 존재하지만 저장소에 제대로 추가되지 않았습니다.

해결 방법은 .gitmodules에 지정된 경로를 사용하여 수동으로 다시 추가하는 것입니다. 당신은

Re-adding a git submodule

git submodule add <url> <path> 
(I이 아마 원래 포스터에 대한 해결책이 아니다 실현, 그러나 희망이 도움이 ... TortoiseGit의 UI를 사용하거나 각 모듈에 대한 명령 줄에서이 작업을 실행할 수 있습니다 다른 사람이 이것을 검색합니다.)

+0

' -force'라고 부릅니다. –

관련 문제