한 줄 요약
Git이 데이터를 차이(델타)가 아니라 스냅샷으로 저장한다는 점을 축으로, 거의 모든 연산이 로컬이라는 성질·해시 기반 무결성·파일이 놓이는 세 가지 상태를 설명하는 절이다. Git 동작 원리의 출발점이다.
핵심 내용
- 스냅샷이지 델타가 아니다 — CVS·Subversion·Perforce 같은 다른 시스템은 "파일 목록 + 각 파일의 시간에 따른 변경분"으로 정보를 저장한다(델타 기반). Git은 커밋할 때마다 전체 파일이 그 순간 어떤 모습인지 사진을 찍고 그 스냅샷에 대한 참조를 저장한다.
- 안 바뀐 파일은 다시 저장하지 않는다 — 효율을 위해 이전에 저장한 동일 파일로의 링크만 남긴다. 그래서 스냅샷 방식이면서도 용량이 폭발하지 않는다.
- 거의 모든 연산이 로컬이다 — 역사 전체가 로컬 디스크에 있어서 로그 조회도, 한 달 전 파일과의 diff도 서버에 묻지 않고 즉시 계산한다. 비행기 안이나 VPN이 끊긴 집에서도 커밋을 계속 쌓을 수 있다.
- 무결성 — 모든 것이 저장 전에 체크섬 계산되고 그 체크섬으로 참조된다. Git 모르게 파일이나 디렉터리 내용을 바꾸는 것이 불가능하고, 전송 중 손상도 탐지된다. 이 장치는 Git의 가장 낮은 층에 박혀 있다.
- SHA-1 해시 — 체크섬 방식은 SHA-1이며 16진수 40자 문자열이다. Git은 데이터베이스에 파일 이름이 아니라 내용의 해시값으로 모든 것을 저장한다.
- 대개 데이터를 더하기만 한다 — 거의 모든 동작이 DB에 데이터를 추가할 뿐이라, 되돌릴 수 없는 일을 시키기가 어렵다. 다만 커밋하지 않은 변경은 여전히 잃을 수 있다.
- 세 가지 상태 — 파일은 modified(고쳤지만 아직 커밋 안 됨) / staged(다음 커밋에 넣겠다고 표시함) / committed(로컬 DB에 안전히 저장됨) 중 하나에 있다. 이것이 작업 트리·스테이징 영역·Git 디렉터리라는 세 구역으로 이어진다.
- 스테이징 영역의 정체 — 다음 커밋에 무엇이 들어갈지를 담은 파일 하나이며, Git 용어로는 "인덱스"다. Git 디렉터리는 메타데이터와 객체 데이터베이스를 담고, clone 할 때 복사되는 것이 바로 이 부분이다.
주요 주장 / 데이터
- "Git은 VCS라기보다 강력한 도구가 얹힌 미니 파일시스템에 가깝다" — 스냅샷 모델이 불러오는 결론으로 문서가 직접 쓰는 표현이다.
- 다른 VCS의 상식을 비우고 읽으라고 당부한다 — 명령어 이름이 비슷해서 오히려 헷갈린다는 이유로, 절 도입부에서 CVS·Subversion·Perforce 지식을 내려놓으라고 명시한다.
- 예시 해시 —
24b9da6552252987aa493b52f8696cd6d3b00373같은 40자 16진수 문자열로 모든 객체가 불린다. - 기본 워크플로 3단계 — 작업 트리에서 고치고 → 원하는 변경만 골라 스테이징하고 → 커밋해서 스냅샷을 Git 디렉터리에 영구 저장한다.
출처 정보
- 저자/발행처: Scott Chacon, Ben Straub — Pro Git 2nd ed. (Apress, CC BY-NC-SA 3.0)
- 수집일: 2026-09-22
- URL: https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F
- 범위: 1.3절 본문 전체(스냅샷·로컬 연산·무결성·추가만 함·세 가지 상태). 원문 그림(그림 4~6)은 캡션만 남았다.