Git 내부 구조
Git의 내부 구조 뜯기
Git
git init 명령을 실행하면 프로젝트 폴더에 .git 이라는 숨김 폴더가 생긴다.
이 폴더가 바로 Git이 모든 버전 관리 정보를 보관하는 저장소의 뇌이다.
| 경로 | 역할/설명 |
|---|---|
.git/objects/ | Git 오브젝트(Blob, Tree, Commit)들이 해시값 기반으로 저장되는 폴더 |
.git/index/ | 스테이지의 실제 데이터, 어떤 파일이 스테이지에 올라갔는지 추적하는 바이너리 파일 |
.git/logs/ | 주요 HEAD 이동, 브랜치 변경, 커밋 기록 등의 로그를 저장 |
objects
- 파일 내용, 폴더 정보, 커밋 정보를 해시로 저장
- 각각
<2글자>/<나머지38글자>형식의 하위 폴더와 파일로 되어있음 - 내부 데이터는
zlib으로 압축됨
index
- 현재 스테이지 영역의 상태를 기록
git add를 하면 파일의 변경 내용과 메타데이터가 이곳에 기록됨- 바이너리 형식이라 직접 열어보면 알기 힘듦
logs
- 예를 들어,
.git/logs/HEAD파일에는 HEAD가 어디를 가리켰는지 이력이 남아있음
HEAD
- 현재 작업 중인 브랜치나 특정 커밋을 가리키는 포인터 역할을 하는 일반 텍스트 파일
ref: refs/heads/<name>- HEAD가 name 브랜치를 가리킨다는 의미