seungjun.dev

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가 어디를 가리켰는지 이력이 남아있음
  • 현재 작업 중인 브랜치나 특정 커밋을 가리키는 포인터 역할을 하는 일반 텍스트 파일
  • ref: refs/heads/<name>
  • HEAD가 name 브랜치를 가리킨다는 의미