2013-11-03 2 views
6

손상된 저장소를 만드는 방법에는 어떤 것이 있습니까? git 저장소를 영구적으로 손상시킬 수있는 방법이 있습니까? git 저장소가 정상적으로 작동하지만 이상한 일을 할 수 있습니까?어떻게하면 Git 저장소가 손상 될 수 있습니까?

진정으로 복구 할 수없는 상태를 만들었는지 누군가가 걱정할 때 관심을 갖습니다. 일반적으로 수정하기 쉽거나 적어도 함께 조각하는 것으로 나타납니다. 숨겨진 (악의) git이 있습니까?

+4

100 개의 임의의 8 비트 숫자를 선택하십시오. 그 중 하나는'.git'에있는 모든 파일의 모든 바이트를 무작위로 추출합니다. 난수는 잊어 버려. –

+0

나는 Dropbox 폴더에 넣은 Git 저장소에 문제가 있음을 기억하고있다. Git은 Dropbox가 현재 업로드하고있는 파일에 쓰기를 시도했다. 그들의 본질이 무엇인지, 그것이 명백하지 않은 부패인지 또는 단지 실패한 커밋인지는 모르지만, 당신은 그것을 조사 할 수 있습니다. – millimoose

+0

1 단계 : ECC 메모리를 사용하지 마십시오. 2 단계 : ???. http://www.mail-archive.com/[email protected]/msg37928.html –

답변

7

글쎄, 가장 직접적인 손상은 .git/objects 디렉토리 내의 데이터 또는 데이터 무결성 손실입니다. 불변의 쓰기 전용 저장소 메커니즘으로 설계되었으므로 일단이 가정을 위반하면 많은 다른 것들은 무너질 것입니다. 가장 일반적으로 이것은 네트워크 전송에서 손상된 packfiles로 인해 발생합니다. 당신이 매우 (운명 : 천문학적으로) 불행하지 않다면, 자식은 당연히 이것을 감지하고 큰 소리로 불평 할 것이다. 이 방법으로 침묵하는 실패를 얻으려면 정확한 형식 및 크기의 헤더로 압축을 풀고 SHA1 해시를 유지하는 방식으로 BLOB를 손상시켜야합니다.

그래서 자식은 자신의 데이터 무결성을 확인하는 데 매우 좋습니다. 우리는 그 밖에 무엇을 할 수 있습니까? 정말 상태를 복구 할 수없는을하려면 다음이 필요합니다 : 그 상태와 관련된

  1. 커밋 및 기타 목적 (즉 .git/refs에서 명명 된 심판 또는 reflog에 의해 도달 할 수없는입니다) 참조되지 않은 것으로;
  2. 실제로 가비지 수집은 상태를 영구히 삭제하거나 새로운 복제본을 가져 와서 원본을 삭제합니다.

그렇지 않으면 언제든지 git checkout <sha> && git branch recovered을 실행하고 모든 작업을 되돌릴 수 있습니다. 당신이 rebase, cherry-pick, 또는 filter-branch 할 때 일반적인 자식 사용법으로 커밋이 고아가됩니다.이 커밋은 오래된 커밋 객체를 기반으로 새로운 커밋 객체를 생성하거나, 분기가 git reset --hard 인 경우에 발생합니다. 기본적으로 당신은 당신의 reflog를 잘라내어 수작업으로 잘라내어 일찍 핵무기를 만들 수 있지만, 유예 기간은 about two weeks입니다.

처음에는 git에 데이터를 추가하지 않으면 데이터가 손실되는 경우가 자주 있습니다. 새 사용자는 자주 커밋하기를 주저하고 더러운 작업 카피와 함께 명령을 사용하려고 시도합니다. git에서 상태를 기록하지 않으면 git이 다시 상태를 가져올 수 없습니다! 당신이 복구하지만 어려운 통지 발뺌으로 괜찮 경우

, 당신은 병합 또는 필터 분기 작업에 가짜 역사 운영에 자식을 속일 git replace 또는 graft points 일부 evilness을 할 수 있습니다. 대체 된 커밋은 여전히 ​​도달 할 수있는 것으로 계산되므로 영구적 인 손상은 발생하지 않습니다.

+0

* 신규 사용자는 종종 자주 커밋하는 것을 주저합니다. * 커밋이 무료라는 사실을 사람들에게 계속 전합니다. –

+0

@ ta.speot.is : 만드는 것은 어려운 정신적 조정입니다! 필자는 일반적으로 두 가지 별도의 동작 즉, 상태 기록을위한 "커밋"및 상태 공유를위한 "밀어 내기"를 나타내는 git으로 제시하려고합니다. 사람들이 합리적으로 그것을 이해한다고하더라도, 습관은 변화시키기가 가장 힘든 일입니다. –

관련 문제