[git] GIT 오류를 수정하는 방법 : 개체 파일이 비어 있습니까?

변경 사항을 커밋하려고하면 다음 오류가 발생합니다.

error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt

이 오류를 해결하는 방법을 알고 있습니까?

편집하다

나는 git fsck내가 가지고 시도했다 :

error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt



답변

나는 비슷한 문제가 있었다. 자식 작업 중에 랩톱의 배터리가 부족합니다. 우우.

나는 백업이 없었다. (NB Ubuntu One은 git의 백업 솔루션이 아니며 손상된 저장소로 정상 저장소를 덮어 쓰는 데 도움이됩니다.)

자식 마법사 에게이 문제를 해결하는 나쁜 방법이라면 의견을 남겨주세요. 그러나 그것은 적어도 일시적으로 나를 위해 일했습니다.

1 단계 : .git 백업 (실제로 변경하는 모든 단계 사이에 .git-old-1, .git-old-2 등의 새로운 복사 대상 이름으로 수행) :

cp -a .git .git-old

2 단계 : 실행 git fsck --full

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e is empty
fatal: loose object 8b61d0135d3195966b443f6c73fb68466264c68e (stored in .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e) is corrupt

3 단계 : 빈 파일을 제거합니다. 나는 도대체 무엇을 알아 냈다; 어쨌든 그것의 공백.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ rm .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e
rm: remove write-protected regular empty file `.git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e'? y

3 단계 : git fsck다시 실행 빈 파일을 계속 삭제하십시오. 디렉토리 cd로 들어가서 빈 파일을 모두 제거 할 수도 있습니다. 결국 git은 실제로 객체 디렉토리로 무언가를하고 있다고 말하기 시작했습니다..gitfind . -type f -empty -delete -print

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: object file .git/objects/e0/cbccee33aea970f4887194047141f79a363636 is empty
fatal: loose object e0cbccee33aea970f4887194047141f79a363636 (stored in .git/objects/e0/cbccee33aea970f4887194047141f79a363636) is corrupt

4 단계 : 빈 파일을 모두 삭제 한 후 결국 git fsck실제로 실행되었습니다.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: HEAD: invalid sha1 pointer af9fc0c5939eee40f6be2ed66381d74ec2be895f
error: refs/heads/master does not point to a valid object!
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229

5 단계 : 시도해보십시오 git reflog. 내 머리가 부러 졌기 때문에 실패했습니다.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git reflog
fatal: bad object HEAD

6 단계 : Google 이것을 찾으십시오 . reflog의 마지막 두 줄을 수동으로 가져옵니다.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ tail -n 2 .git/logs/refs/heads/master
f2d4c4868ec7719317a8fce9dc18c4f2e00ede04 9f0abf890b113a287e10d56b66dbab66adc1662d Nathan VanHoudnos <nathanvan@gmail.com> 1347306977 -0400  commit: up to p. 24, including correcting spelling of my name
9f0abf890b113a287e10d56b66dbab66adc1662d af9fc0c5939eee40f6be2ed66381d74ec2be895f Nathan VanHoudnos <nathanvan@gmail.com> 1347358589 -0400  commit: fixed up to page 28

7 단계 : 6 단계에서 HEAD가 현재 마지막 커밋을 가리키고 있음을 알았습니다. 부모 커밋을 살펴 보자.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git show 9f0abf890b113a287e10d56b66dbab66adc1662d
commit 9f0abf890b113a287e10d56b66dbab66adc1662d
Author: Nathan VanHoudnos <nathanvan@XXXXXX>
Date:   Mon Sep 10 15:56:17 2012 -0400

    up to p. 24, including correcting spelling of my name

diff --git a/tex/MCMC-in-IRT.tex b/tex/MCMC-in-IRT.tex
index 86e67a1..b860686 100644
--- a/tex/MCMC-in-IRT.tex
+++ b/tex/MCMC-in-IRT.tex

효과가 있었다!

8 단계 : 이제 HEAD가 9f0abf890b113a287e10d56b66dbab66adc1662d를 가리켜 야합니다.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git update-ref HEAD 9f0abf890b113a287e10d56b66dbab66adc1662d

불평하지 않았다.

9 단계 : fsck의 내용을 확인하십시오.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229

10 단계 : 캐시 트리의 잘못된 sha1 포인터가 (현재 오래된) 인덱스 파일 ( source ) 에서 온 것 같습니다 . 그래서 나는 그것을 죽이고 repo를 재설정했습니다.

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ rm .git/index
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git reset
Unstaged changes after reset:
M   tex/MCMC-in-IRT.tex
M   tex/recipe-example/build-example-plots.R
M   tex/recipe-example/build-failure-plots.R

11 단계 : fsck를 다시보고 …

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a

매달려 모양에 오류가 없습니다 . master.u1conflict에 관심이 없으며 이제 작동하므로 더 이상 만지고 싶지 않습니다!

12 단계 : 로컬 편집 내용 확인 :

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   tex/MCMC-in-IRT.tex
#   modified:   tex/recipe-example/build-example-plots.R
#   modified:   tex/recipe-example/build-failure-plots.R
#
< ... snip ... >
no changes added to commit (use "git add" and/or "git commit -a")


nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git commit -a -m "recovering from the git fiasco"
[master 7922876] recovering from the git fiasco
 3 files changed, 12 insertions(+), 94 deletions(-)

nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git add tex/sept2012_code/example-code-testing.R
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git commit -a -m "adding in the example code"
[master 385c023] adding in the example code
 1 file changed, 331 insertions(+)
 create mode 100644 tex/sept2012_code/example-code-testing.R

따라서 앞으로는 사람들에게 유용하게 사용될 수 있기를 바랍니다. 다행 이네요.


답변

git 객체 파일이 손상되었습니다 (다른 답변에서도 지적했듯이). 이것은 기계 충돌 등에서 발생할 수 있습니다.

나는 같은 것을했다. 여기에 다른 상위 답변을 읽은 후 다음 명령을 사용하여 손상된 git 저장소를 수정하는 가장 빠른 방법을 찾았습니다 ( .git폴더 가 포함 된 git 작업 디렉토리에서 실행 ).

(git 저장소 폴더를 먼저 백업하십시오!)

find .git/objects/ -type f -empty | xargs rm
git fetch -p
git fsck --full

먼저 저장소 전체를 손상시키는 빈 오브젝트 파일제거한 다음 원격 저장소에서 누락 된 오브젝트 (최신 변경 사항) 를 페치 한 다음 전체 오브젝트 저장소 확인 을 수행합니다 . 이 시점에서 오류없이 성공해야합니다 (여전히 경고가있을 수 있습니다!)

추신. 이 답변은 git 저장소의 원격 사본이 어딘가에 있고 (예 : GitHub에서) 깨진 저장소는 원격 저장소에 연결된 로컬 저장소이며 여전히 유효합니다. 그렇지 않은 경우 권장하는 방식으로 수정하지 마십시오.


답변

이 오류는 커밋을 푸시하고 컴퓨터가 멈출 때 발생합니다. 이것이 내가 고친 방법입니다.


해결 단계

git status

비어 있거나 손상된 객체 파일 표시

rm .git/objects/08/3834cb34d155e67a8930604d57d3d302d7ec12

그것을 제거

git status

나는 fatal: bad object HEAD메시지를 받았다

rm .git/index

index재설정을 위해를 제거합니다

git reset

치명적 : 개체 ‘HEAD’을 (를) 구문 분석 할 수 없습니다.

git status
git pull

무슨 일이 일어나고 있는지 확인하기 위해

tail -n 2 .git/logs/refs/heads/MY-CURRENT-BRANCH

tail -n 2로그 분기 의 마지막 두 줄 을 인쇄하여 마지막 2 줄 을 표시합니다.commit hash

git update-ref HEAD 7221fa02cb627470db163826da4265609aba47b2

나는 마지막을 선택 commit hash

git status

파일을 deleted제거했기 때문에 모든 파일을 표시 .git/index합니다.

git reset

재설정을 계속

git status

내 수정 사항 확인


참고 : 이 질문에 착륙하고 답변을 참조로 사용하면 단계가 시작됩니다.


답변

git fsck가 감지 한 다양한 빈 파일을 제거한 다음 간단한 git pull을 실행하여이를 해결했습니다.

파일 시스템조차도 fs sane을 유지하기 위해 저널링 및 기타 “트랜잭션”기술을 구현 했으므로 git은 정전이나 장치 공간으로 인해 손상된 상태가 될 수 있습니다 (자체적으로 복구 할 수 없음).


답변

방금 똑같은 문제가 발생했습니다. 원격 저장소를 가져온 후 git 상태를 수행했을 때 “오류 : 객체 파일 (…)이 비어 있습니다” “치명적인 : 느슨한 객체 (…)가 손상되었습니다”

내가 이것을 해결하는 방법은 다음과 같습니다.

  1. 자식 숨김
  2. 오류가있는 git 파일 제거 (필요하지 않음)
  3. 자식 숨김

나는 무슨 일이 일어 났는지 정확히 알지 못하지만 그 지침은 모든 것을 깨끗하게하는 것처럼 보였습니다.


답변

VM을 정기적으로 재부팅해야하므로이 문제는 매우 자주 발생합니다. 그것의 몇 번 후에, 나는 그것이 항상 작동하지만, 이것이 일어날 때마다 @ Nathan-Vanhoudnos가 묘사 한 과정을 반복 할 수 없다는 것을 깨달았습니다. 그런 다음 다음과 같은 더 빠른 솔루션을 찾았습니다.

1 단계

전체 저장소를 다른 폴더로 이동하십시오.

mv current_repo temp_repo

2 단계

리포지를 원점에서 다시 복제하십시오.

git clone source_to_current_repo.git

3 단계

.git 폴더를 제외한 새 저장소 아래의 모든 항목 을 제거하십시오 .

4 단계

.git 폴더를 제외한 모든 것을 temp_repo 에서 새 저장소로 이동 하십시오 .

5 단계

temp_repo를 제거하면 완료됩니다.

몇 번이 지나면이 절차를 매우 빠르게 수행 할 수 있습니다.


답변

  1. mv 폴더 응용 프로그램 백업, 즉 mv app_folder app_folder_bk ( git stash 와 같습니다 )
  2. 자식 복제 your_repository
  3. 드디어,. 병합 도구 (meld diff viewer linux 또는 Winmerge Windows 사용)를 열고 오른쪽 ( app_folder_bk )에서 왼쪽 (new app_folder )으로 변경 사항을 복사하십시오 ( git stash apply 와 같습니다 ).

그게 다야. 어쩌면 그것이 가장 좋은 방법은 아니지만 그렇게 실용적이라고 생각합니다.