“fatal: bad object” 오류란?
이 Git 오류는 심각합니다.
Git의 내부 데이터베이스에 문제가 있음을 나타냅니다.
.git/objects
디렉터리는 모든 콘텐츠를 저장합니다.
콘텐츠는 객체(커밋, 트리, 블롭)로 저장됩니다.
“bad object” 오류는 객체가 누락되었거나 손상되었음을 의미합니다.
Git이 해당 객체를 읽을 수 없습니다.
이것은 하드웨어 오류로 인해 발생할 수 있습니다.
디스크 오류나 정전이 파일을 손상시킬 수 있습니다.
또한 .git
디렉터리가 부적절하게 수정된 경우에도 발생할 수 있습니다.
문제 진단 방법
먼저, 저장소의 무결성을 확인해야 합니다.
Git에는 이를 위한 내장 도구가 있습니다.
명령어는 git fsck
입니다.
1단계: git fsck 실행
git fsck --full
이 명령어는 데이터베이스에서 손상되거나 매달린 객체가 있는지 확인합니다. 아마도 동일한 “bad object” 오류를 보고할 것입니다. 하지만 더 많은 세부 정보를 제공할 수도 있습니다. 누락된 객체나 다른 불일치 목록을 보여줄 수 있습니다. 잘못된 객체의 해시 값에 주목하세요.
오류 복구 방법
복구는 상황에 따라 다릅니다. 저장소의 깨끗한 원격 사본이 있습니까? 아니면 로컬 전용 저장소에서 작업 중입니까?
시나리오 1: 깨끗한 원격 저장소가 있는 경우
이것이 가장 해결하기 쉬운 시나리오입니다. 원격 저장소에서 누락된 객체를 가져올 수 있습니다.
1단계: 원격에서 가져오기
git fetch --all
이 명령어는 모든 원격 저장소에서 누락된 모든 객체를 다운로드합니다.
2단계: 다시 무결성 확인
git fsck --full
이제 명령어가 오류를 보고하지 않으면 문제가 해결된 것입니다.
3단계: 오류가 계속되면 새로 복제 시도 때로는 로컬 손상이 너무 심각합니다. 가장 안전한 해결책은 저장소를 다시 복제하는 것입니다. 먼저, 푸시하지 않은 로컬 변경 사항을 백업하세요. 패치를 만들거나 수정된 파일을 다른 곳에 복사할 수 있습니다.
# 1. 작업 백업 (예: 다른 폴더에 파일 복사)
# 2. 오래된 손상된 저장소 이동
mv my-corrupted-repo my-corrupted-repo-backup
# 3. 새 복사본 복제
git clone <your-remote-url>
# 4. 새 저장소에 변경 사항 다시 적용
시나리오 2: 원격 저장소가 없는 경우
이 상황은 훨씬 더 어렵습니다. 손상된 객체는 영원히 손실되었을 가능성이 높습니다. 해당 커밋의 정확한 상태를 쉽게 복구할 수 없습니다.
옵션 1: 잘못된 객체 제거 (최후의 수단)
이것은 파괴적인 조치입니다. 프로젝트 히스토리의 일부를 잃을 수 있습니다. 다른 선택지가 없을 때만 이 방법을 사용하세요.
# 해시를 사용하여 잘못된 객체의 경로 찾기
# 예시 해시: a1b2c3d4...
# 경로: .git/objects/a1/b2c3d4...
# 손상된 객체 파일 제거
rm .git/objects/a1/b2c3d4...
제거한 후에는 깨진 히스토리를 처리해야 합니다.
이는 복잡한 git rebase
작업을 포함할 수 있습니다.
옵션 2: 백업에서 복원
로컬 저장소의 백업이 있다면, 지금이 사용할 때입니다. 백업에서 복원하는 것이 가장 안전한 복구 방법입니다.
이 오류를 예방하는 방법
- 정기적으로 저장소를 백업하세요. 로컬 전용 프로젝트에 매우 중요합니다.
- 신뢰할 수 있는 하드웨어를 사용하세요. 디스크 오류는 손상의 일반적인 원인입니다.
.git
디렉터리를 수동으로 편집하지 마세요. 무엇을 하는지 정확히 알지 못하는 한.- 변경 사항을 자주 푸시하세요. 원격 저장소가 최고의 백업입니다.
결론
“fatal: bad object” 오류는 저장소 손상의 신호입니다.
최상의 해결책은 원격 저장소나 백업에서 복원하는 것입니다.
백업이 없으면 복구가 어렵고 데이터 손실이 발생할 수 있습니다.
정기적으로 git fsck
를 실행하면 문제를 조기에 발견하는 데 도움이 됩니다.
사전 예방적인 백업이 이 오류에 대한 최고의 방어책입니다.
Leave a comment