Git 내부 구조 (Basic)


1. Git은 파일 버전이 아닌 스냅샷 시스템

Git은 "변경점(diff)"이 아니라, 전체 프로젝트의 스냅샷(상태)을 저장한다.

커밋 하나 = 전체 폴더의 압축 스냅샷 (단, 중복은 자동 제거됨)


2. Git의 3대 영역

작업 디렉토리      →    스테이징 영역       →    로컬 저장소
(Working Directory)     (Staging/Index)         (Repository/.git)
   코드 작성                 git add                 git commit

영역

설명

작업 디렉토리

실제로 코드 작성/수정하는 공간

스테이징 영역 (Index)

커밋할 파일을 담아두는 임시 공간 (git add)

로컬 저장소

커밋이 저장되는 .git 디렉토리


3. 주요 Git 내부 객체

Git은 4가지 핵심 객체로 이루어져 있습니다:

객체

설명

예시

🔹 Blob

파일 내용 저장 (binary large object)

hello.java 내용

🔸 Tree

디렉토리 구조와 파일 리스트

폴더 구조

🔹 Commit

커밋 메타데이터 + 부모 커밋 + tree

"커밋 메시지"

🔸 Tag

특정 커밋에 이름 부여

v1.0.0

📦 커밋은 tree를 가리키고, tree는 blob들을 가리킵니다.

[commit]
   |
   v
[tree]
 ├── [blob] hello.txt
 └── [blob] app.js

4. HEAD란?

HEAD → 현재 체크아웃한 브랜치 or 커밋

5. 브랜치란?

브랜치는 단지 커밋을 가리키는 포인터이다.

A---B---C  ← main (브랜치)
        ↑
      HEAD

6. Reflog란?

git reflog

→ HEAD와 브랜치가 가리키던 이전 위치들의 로그


7. .git 디렉토리 구조 요약

.git/
├── objects/       ← 커밋, 트리, 블롭, 태그 객체 저장소
├── refs/          ← 브랜치, 태그 등의 포인터
├── HEAD           ← 현재 가리키는 브랜치
├── index          ← 스테이징 정보
├── logs/          ← reflog 정보 저장
└── config         ← Git 설정

📌 정리

개념

설명

Commit

전체 스냅샷 + 부모 커밋 정보

Blob

파일 내용 저장

Tree

폴더 구조

Branch

커밋을 가리키는 포인터

HEAD

현재 브랜치 or 커밋

Staging Area

다음 커밋을 준비하는 공간

Reflog

HEAD의 이동 이력 추적 가능 (복구에 유용)




Revision #4
Created 28 May 2025 08:01:50 by Dain
Updated 28 May 2025 08:24:20 by Dain