# 도식화 --- ## 1. 전체 구조 개요 ``` .git/ ├── HEAD ← 현재 가리키는 브랜치 (예: ref: refs/heads/main) ├── config ← 로컬 Git 설정 ├── description ← 주로 bare repo에서 사용 ├── index ← 스테이징 영역 정보 (트래킹 중인 파일 목록) ├── objects/ ← Git 객체 저장소 (blob, tree, commit, tag) │ ├── xx/xxxx... ← SHA-1 해시로 저장된 개별 객체 │ └── pack/ ← 압축된 객체 저장소 (.pack, .idx) ├── refs/ ← 브랜치, 태그 등 참조(포인터) │ ├── heads/ ← 브랜치 참조 (예: main, feature) │ ├── remotes/ ← 원격 브랜치 정보 (예: origin/main) │ └── tags/ ← 태그 정보 ├── logs/ ← HEAD 및 refs의 이동 이력 (reflog 저장소) │ ├── HEAD │ └── refs/ ├── info/ ← exclude 설정 등 부가 정보 └── hooks/ ← 커밋, 푸시 등 Git 이벤트용 스크립트 ``` --- ## 2. 각 구성 요소 설명 ### 🔹 `.git/HEAD` - 현재 Git이 바라보는 위치 - 대부분 `ref: refs/heads/main` 형태 - ****HEAD → 브랜치 → 커밋**** ### 🔹 `.git/objects/` - Git의 핵심: 모든 파일/폴더/커밋을 ****SHA-1 해시값****으로 저장 - 하위 폴더 + 해시 기반 객체들 ```bash .git/objects/ ├── a7/... ├── d1/... └── pack/ ← packfile 압축 저장소 ``` ### 🔹 `.git/refs/` - 브랜치/태그가 어떤 커밋을 가리키는지 저장 ``` .git/refs/heads/main → a1b2c3d4e5 (커밋 해시) ``` ### 🔹 `.git/logs/` - `git reflog` 명령에서 쓰이는 내부 이력 - `HEAD`, `branches`, `remotes` 이동 내역 저장 ### 🔹 `.git/index` - 스테이징 영역(index)의 내부 상태를 저장하는 바이너리 파일 - `git add` → index에 등록 → `git commit` 때 커밋됨 ### 🔹 `.git/hooks/` - 커밋/푸시/머지 전후에 실행되는 자동화 스크립트 ```text pre-commit, post-commit, pre-push 등 ``` --- ## 3. 핵심 흐름 ```text 📁 Working Directory ↓ git add 📂 .git/index (Staging Area) ↓ git commit 📦 .git/objects/ (커밋, 트리, 블롭 저장) ↓ 브랜치 포인터 이동 📄 .git/refs/heads/main ↑ HEAD → 현재 브랜치 참조 ``` --- ## 요약
구성요소 설명
`HEAD` 현재 브랜치 또는 커밋을 가리킴
`refs` 브랜치/태그 → 커밋 연결
`objects` 모든 데이터(SHA-1 기반) 저장소
`index` 스테이징 상태 추적
`logs` HEAD 및 브랜치 이동 이력 (reflog)
`hooks` Git 이벤트 발생 시 실행되는 스크립트
---