Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

Git pack 손상 또는 index-pack 실패? 어느 경계에서 byte가 사라졌는지 먼저 증명하세요

pack 이동, 재clone, gc 전에 local object database, transfer truncation과 remote pack producer를 분리합니다.

local object database, transfer path와 remote pack producer를 구분하는 오리지널 일러스트.
오리지널 일러스트: pack byte를 잃거나 바꾼 첫 경계를 찾습니다. Watch at Ease

pack checksum mismatch와 invalid index-pack output은 같은 owner를 뜻하지 않습니다. 후자는 transfer truncation이나 remote producer failure의 마지막 증상일 수 있습니다.

pack 삭제, 유일한 worktree 위 재clone, gc부터 하지 않습니다. first error와 object database를 보존하고 boundary를 증명한 뒤 known-good source에서 복구하고 objects, refs, work, repeatable transfer로 종료합니다.

first error를 보존하고 object mutation을 멈춥니다

command, Git version, repo path, stderr, exit, transport, credential을 제거한 remote, 첫 checksum/CRC/bad offset/early EOF/index-pack line을 저장하고 자동 gc, repack, prune, fetch, mirror, backup을 멈춥니다.

filesystem copy와 uncommitted work/index changes를 따로 보존하고 관련 .pack/.idx name, size, hash를 기록합니다. 유일한 copy에서 수리하지 않습니다.

local, transfer, remote를 판정합니다

stored pack checksum/CRC는 local database를 가리키지만 clone early EOF/index-pack은 truncation, client disk, proxy/SSH, remote pack-objects일 수 있습니다.

healthy client, empty destination, approved alternate transport를 비교합니다. 한 old clone, 한 repo의 모든 clone, 한 client의 모든 repo는 의미가 다릅니다.

pack, index, objects, refs를 매핑합니다

copy에서 git fsck --full을 저장하고 exact idx/pack에 git verify-pack을 실행합니다. index-pack 성공만으로 required refs reachability가 증명되지 않습니다.

pack checksum, index checksum/CRC, bad offset, missing referenced object, dangling object를 구분하고 의존 refs/commits를 기록합니다.

known-good source에서 최소 복구합니다

disposable clone과 완전한 remote라면 다른 directory에 clone하고 local changes와 commit IDs를 비교합니다. server damage라면 verified backup 또는 clone을 씁니다.

exact object 또는 verified pack만 복구합니다. salvage와 unpack-objects는 copy에서만 하고 original evidence를 지우거나 incomplete repo에 gc/prune하지 않습니다.

integrity, refs, work, repeatability로 닫습니다

final full fsck, branches, tags, commit IDs, uncommitted work와 critical objects를 확인합니다. 한 branch checkout은 전체 증명이 아닙니다.

new empty destination에서 original clone/fetch를 반복해 clean integrity, matching refs, accounted work와 non-truncated transfer를 확인합니다.

local corruption, truncation, missing object와 damaged pack 복구를 고르는 오리지널 일러스트.
오리지널 일러스트: 최소 복구를 선택하고 objects와 refs로 검증합니다. Watch at Ease