2012-07-24 2 views
3

내 자식 repo가 ​​손상되어 불행히도 로컬에만 존재합니다. 누락 된 나무 복구

$ git fsck --full 
Checking object directories: 100% (256/256), done. 
broken link from tree 54b4ff576b2e39831a298e58a38d91890f622b63 
       to tree d564d0bc3dd917926892c55e3706cc116d5b165e 
missing tree d564d0bc3dd917926892c55e3706cc116d5b165e 

나는 d564d0bc이 무엇인지에 확인하고는 레일 프로젝트에서 내 log/ 폴더입니다. 이 폴더는 *.log 개의 파일 (무시 됨)과 .gitkeep 파일 만 포함합니다.

나는이 post에 언급 된 단계를 시도했지만 Windows 용 GitHub를 사용하고 있으며 Powershell이 ​​빈 파이프 위에 나를 비명 지르고있다.

도움을 주시면 감사하겠습니다.

업데이트 : PowerShell 명령에 대해 걱정할 필요가 없도록 프로젝트를 Linux에 복사했습니다. 나는 아직도 해결책을 찾지 못했다.

+0

+1 올바른 쉘로 이동하는 것을 실현했습니다. –

+0

'... d564d0bc가 무엇인지 확인하려면'어떤 명령을 사용 했습니까? – EoghanM

+0

@EoghanM 죄송합니다. 체크인은 혼란 스러웠습니다. 나는 그것이 무엇인지 보았다. 오랜 시간이 걸렸지 만 아마 'git checkout d564d0bc'라고 생각합니다. – MikeKusold

답변

2

누락 된 트리에 .gitkeep 파일 만 포함되어 있고 누락 된 트리를 다시 작성할 수있는 것보다 내용이 확실한 경우

당신이 알아야 할 것은 저수준 자식 명령 모음입니다. 준비 되었나요? 가기! 우선. git mktree을 사용해야합니다.

이 명령은 stdin 데이터를 읽고이 정보를 기반으로 트리를 만듭니다. 그것은 새로 만든 나무의 SHA1의 써머 (이 d564d0bc3dd917926892c55e3706cc116d5b165e에 동일 있는지 확인하기 위해 잊지 마세요)를 출력

이 입력의 어떤 형식을 알 필요가

다음 일이?! 형식은 SP는 공백

인 다음
<mode> SP <type> SP <object> TAB <file> 

이다 TAB는 탭이다.

  • 파일 이름

자식 객체 유형 (파일 BLOB, 폴더 트리)

  • 객체
  • 의 SHA1 해시있는 파일 모드
  • 임 예를 보여 드리겠습니다. 합니다 (some_file 파일이 비어)이 폴더 트리를 만들려면

    drwxrwxr-x 2 aleksandr aleksandr 4096 2012-07-25 03:51 . 
    drwxrwxr-x 4 aleksandr aleksandr 4096 2012-07-25 03:54 .. 
    -rw-rw-r-- 1 aleksandr aleksandr 0 2012-07-25 03:51 some_file 
    

    당신은

    echo -e "100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391\tsome_file" | git mktree 
    

    를 실행해야합니다 그러나 당신은 어떻게 원하는 SHA1 해시를 찾았어요! 구출에 git hash-object. 그냥

    git hash-object log/.gitkeep 
    

    해시를 확인합니다. 나는 당신이 당신의 저장소를 고칠 때 알아야 할 전부라고 생각한다.

  • +0

    정말 고마워요.이 문제를 겪을만한 다른 사람은'cd '를 폴더에 넣고 경로를 사용할 수 없습니다. 나의 예제에서 나는'log' 폴더에 들어가야 만했다. 내가 사용한 마지막 명령은 다음과 같습니다. 'echo -e "100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 \ t.gitkeep"| git mktree' – MikeKusold