피드로 돌아가기
Dev.toDevOps
원문 읽기
SHA-1 기반 Content-addressable Filesystem 구조의 Git 내부 설계 분석
What’s Actually Happening When You Use Git
AI 요약
Context
단순한 변경 이력 추적 도구로 오해받는 Git의 실제 동작 원리에 대한 분석임. 파일명이나 위치 기반의 저장 방식이 아닌 콘텐츠 기반의 식별 체계를 통해 데이터 무결성과 효율적인 버전 관리를 달성함.
Technical Solution
- SHA-1 해시 알고리즘을 통한 Content-addressable Filesystem 구현으로 동일 콘텐츠의 중복 저장 방지
- Blob, Tree, Commit 세 가지 Immutable Object 구조를 통한 데이터 계층화 설계
- 파일 내용(Blob) $\rightarrow$ 디렉토리 구조(Tree) $\rightarrow$ 스냅샷 및 메타데이터(Commit)로 이어지는 단방향 참조 체인 구축
- Commit 간의 부모-자식 관계를 Directed Acyclic Graph(DAG) 형태로 관리하여 비선형적 히스토리 분기 및 병합 지원
- Branch를 단순한 Commit SHA를 담은 텍스트 파일(Pointer)로 처리하여 가벼운 브랜치 생성 및 전환 구현
- Three-way Merge 알고리즘을 통해 공통 조상과 두 변경분 사이의 충돌을 감지하고 해결하는 구조 설계
실천 포인트
- Detached HEAD 발생 시 현재 HEAD가 Branch 이름이 아닌 특정 Commit SHA를 직접 가리키는 상태임을 인지할 것 - 데이터 복구가 필요한 경우 git reflog를 통해 DAG 상에서 도달 가능성(Reachability)을 확인하고 SHA로 복구할 것 - 공유 브랜치에서는 히스토리를 재작성하는 git reset 대신 새로운 역전 커밋을 생성하는 git revert를 사용할 것 - 머지 충돌 해결 시 Git이 세 개의 Blob(Common Ancestor, Local, Remote)을 비교하는 메커니즘을 이해하고 접근할 것