본문 바로가기
Tools for Dev

GIT - error: remote: unable to find

by leanu 2009. 3. 4.

Error Msg
------------------------------------------------------------------------------------------
remote: error: remote: unable to find 1a0352d8d664add294d1a47c512aafcac48ccb8d
remote: fatal: unable to get type of object 1a0352d8d664add294d1a47c512aafcac48cremote: cb8d
error: git-upload-pack: git-pack-objects died with error.
fatal: git-upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header



Cause
------------------------------------------------------------------------------------------
GIT blob 중에 1a0352d8d664add294d1a47c512aafcac48ccb8d 를 찾을 수 없다는 메시지이다. 
Disk 혹은 Memory 상의 문제일 수도 있고, 낮은 버전의 GIT 사용으로 인한 버그일 수도 있다는
말로 보아 이 에러의 근원은 알수 없다는 것으로 보인다. 

본인이 이 에러메시지를 받은 상황은 다음과 같다. A라는 클라이언트에서 디렉토리를 git add하고나서 
다른 클라이언트(B)에서 pull을 통해 받아보았는데, 디렉토리 안의 일부 하위 디렉토리안에 파일이 
추가가 안되어서 다시 A 클라이언트에서 추가안된 하위 디렉토리를 git add하고 B 에서 받아보려는
순간 저 메시지가 발생하였다.

원래 directory 에 대해서는 blob 을 생성하지 않는데, 처음에는 저것을 blob으로 인식했다가
다시 커밋할때 저 파일이 지워저야 하는데, 지워지기 전에 받아서 그런거 같다. 언제 지워지는지는
잘 모르겠지만 일정시간( 한 10분 이내? )이 걸리는거 같다. 왜냐하면 다른쪽에서 저 repository를
복사한 경우 별 문제없이 최신 tree를 가져오기 때문이다.


Solution
------------------------------------------------------------------------------------------
최선의 해결책은 아직 나오지 않은 상태이다. 우선 다음과 같은 명령어로 저 object 가 log에서
어떤 파일이었는지를 알수 있다.

     $ git log --raw | grep 1a0352d8d664add294d1a47c512aafcac48ccb8d

git log --raw 를 하면 커밋트리의 모든 blob 에 대한 hash값을 볼 수 있고, 그 blob이 가리키는
파일도 알 수 있다. 그래서 혹시나 동일 파일이 있으면 그 파일을 add 함으로서(내용이 바뀌지 않았다면
동일한 hash값을 얻을 수 있다) 복구 할 수는 있다. 

최종적으로 선택한 임시방편은 지우고 다시 클론하는 방법이였다. ㅋㅋ 차후에 좀더 알아봐야 겠다.

댓글